代码实现
function x=Newnton_iteration(f,x0,error)
%牛顿迭代法求方程解
%x0为初值
%error为误差
format long
syms x;
g=diff(f,x);
g=matlabFunction(g);%将符号函数转化为数值函数
f=matlabFunction(f);
n=1;
x(1)=vpa(x0-feval(f,x0)/feval(g,x0));
e=logical(x(1)-x0);
while abs(e)>error
x(n+1)=vpa(x(n)-feval(f,x(n))/feval(g,x(n)));
e=x(n+1)-x(n);
n=n+1;
end
x=[(1:n)',x'];
end
将其保存为Newton_iteration.m文件。
例子
用Newton迭代法求方程在x0=0.5附近的根,允许误差为0.5*10^(-4).《数值计算方法》()
syms x;
f=x*exp(x)-1;
Newnton_iteration(f,0.5,0.5*10^(-4))
运行结果
ans =
[1, 0.57102043980842220882720994268311]
[2, 0.56715556874411447037891428344197]
[3, 0.56714329053326100150408312501929]
[4, 0.56714329040978387301245641951102]
%第一列对应的是运行次数,第二列为运行结果
通过结果可以看到运行三次的时候就达到题目要求。