例:用牛顿迭代法 (取x初值为1.5) 解算非线性方程 x^3-x-1=0 的根。
程序代码:
manewton.m
function x=manewton(fun,dfun,x0,ep,N)
if nargin<5
N = 500;
end
if nargin<4
ep = 1e-5;
end
k=0;
while k<N
k
x = x0-feval(fun,x0)/feval(dfun,x0) %此两行不加分号可输出全部中间结果
if abs(x-x0)<ep
break;
end
k=k+1;
x0=x;
end
if k==N
warning('已到达迭代次数上限!');
end
运行代码:
>> fun=inline('x^3-x-1'); %原方程
>> dfun=inline('3*x^2-1'); %原方程的微分
>> x=manewton(fun,dfun,1.5) %初值1.5
运行结果:
k =
0
x =
1.3478
|
k =
1
x =
1.3252 |
k =
2
x =
1.3247 |
k =
3
x =
1.3247 |
程序共计算4次,由于达到精度而终止,方程的近似根为x =1.3247。