给你一个完整版:% 牛顿法求解非线性方程组
function main()
clc; clear all;
f = @(x)log(x+sin(x)); % 测试函数
df = @(x)(1+cos(x))/(x+sin(x)); % 导数函数
x0 = 0.1; % 迭代初值
x = TestNewton(f, df, x0) % 牛顿法求解
function x = TestNewton(fname, dfname, x0, e, N)
% 用途:Newton迭代法解非线性方程f(x)=0
% fname和dfname分别表示f(x)及其导函数的M函数句柄或内嵌函数表达式
% x0为迭代初值,e为精度(默认值1e-7)
% x为返回数值解,并显示计算过程,设置迭代次数上限N以防发散(默认500次)% 输入参数
if nargin < 5
N = 500;
end
if nargin < 4
e = 1e-7;
end
x = x0; % 初值
x0 = x+2*e; % 浮动
k = 0; % 步数
fprintf('x[%d]=%12.9f\n', k, x) % 打印信息
while abs(x0-x)>e && k
x0 = x; % 更新x(k)
x = x0 - feval(fname,x0)/feval(dfname,x0); % 更新x(k+1)
fprintf('x[%d]=%12.9f\n', k, x) % 打印信息
end
if k == N
fprintf('已达到迭代次数上限'); % 迭代结束
end
结果:
牛顿也吃苹果。。。