实验五 用Newton法计算方程的根
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
参考程序和书本例题运行程序
1、利用Newton法求方程的根。
function [x_star, index, it]=Newton(fun, x, ep, it_max)
% 求解非线性方程的Newton法,其中
% fun(x) --- 需要求根的函数,
% 第一个分量是函数值,第二个分量是导数值
% x --- 初始点。
% ep --- 精度,当|(x(k)-x(k-1)|<ep时,终止计算。
省缺为1e-5
% it_max --- 最大迭代次数,省缺为100
% x_star --- 当迭代成功时,输出方程的根,
% 当迭代失败时,输出最后的迭代值。
% index --- 当index=1时,表明迭代成功,
% 当index=0时,表明迭代失败(迭代次数>= it_max)。
% it --- 迭代次数。
if nargin <4 it_max=100; end
if nargin <3 ep=1e-5; end
index=0; k=1;
while k<=it_max
x1=x; f=feval(fun, x);
if abs(f(2))<ep break; end
x=x-f(1)/f(2);
if abs(x-x1)<ep index=1; break; end
k=k+1;
end
x_star=x; it=k;
用Newton法计算书本P229例题4。
(求方程f(x)=x^3-x-1=0在区间[1,2]内的根)fun=inline('[x^3-x-1,3*x^2-1]');
[x_star,index,it]=Newton(fun,1.5)
2、steffensen加速迭代方法
function [x_star, index, it]=steffensen(phi, x, ep, it_max)
% Steffensen 加速方法
% phi(x) --- 迭代函数
% x --- 初始点。
% ep --- 精度,当|(x(k)-x(k-1)|<ep时,终止计算。
省缺为1e-5
% it_max --- 最大迭代次数,省缺为100
% x_star --- 当迭代成功时,输出方程的根,
% 当迭代失败时,输出最后的迭代值。
% index --- 当index=1时,表明迭代成功,
% 当index=0时,表明迭代失败(迭代次数>= it_max)。
% it --- 迭代次数。
if nargin <4 it_max=100; end
if nargin <3 ep=1e-5; end
index=0; k=1;
while k<=it_max
x1=x; y=feval(phi,x);
z=feval(phi,y); x=x-(y-x)^2/(z-2*y+x);
if abs(x-x1)<ep
index=1; break;
end
k=k+1;
end
x_star=x; it=k;
书本P255例题1:求x=x^3-1在x0=1.5附近解。
phi=inline('x^3-1');
[x_star,index,it]=steffensen(phi,1.5)。