科学与工程计算平时作业题及答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第1个作业:(牛顿迭代法和斯蒂芬森加速法求非线性方程的根)

使用牛顿迭代法和斯蒂芬森(Steffensen )加速法求解x^5+x=1在1附近的根,要求精确到10^(-6),输出每步的全部中间结果。

解:一、牛顿迭代法:(1)算法说明

牛顿法本质上是一种切线法,它从一端向一个方向逼近方程的根,其递推公式为:

1()'()

n n n n f x x x f x +=- 初始值可以取'()f a 和'()f b 中较大者,这样可以加快收敛速度。

(2)m 文件程序

function root=NewtonRoot(f,a,b,eps)

if (nargin==3)

eps=1.0e-6;

end

f1=subs(sym(f),findsym(sym(f)),a);

f2=subs(sym(f),findsym(sym(f)),b);

if (f1==0)

root=a;

end

if (f2==0)

root=b;

end

if (f1*f2>0)

disp('两端点函数值乘积大于0!');

return ;

else

tol=1;

fun=diff(sym(f));

fa=subs(sym(f),findsym(sym(f)),a);

fb=subs(sym(f),findsym(sym(f)),b);

dfa=subs(sym(fun),findsym(sym(fun)),a);

dfb=subs(sym(fun),findsym(sym(fun)),b);

if (dfa>dfb)

root=a-fa/dfa;

else

root=b-fb/dfb;

end

while (tol>eps)

r1=root;

fx=subs(sym(f),findsym(sym(f)),r1);

dfx=subs(sym(fun),findsym(sym(fun)),r1);

root=r1-fx/dfx

tol=abs(root-r1)

end

end

(3)输入程序

r=NewtonRoot('x^5+x-1',0,1)

(4)输出结果

root =0.7644

tol =0.0690

root =0.7550

tol =0.0094

root =0.7549

tol =1.4717e-004

root =0.7549

tol =3.5523e-008

r =0.7549

二、Steffensen 加速法

(1)算法说明

Steffensen 加速法是弦截法的一种变形,它的递推公式为:

111111()()(())()

k k k k k k k f x x x f x f x f x f x ------=-

+-, 且有 1()()(())()f a x a f a f a f a f a =-+- Steffensen 法的收敛速度也很快。

(2)m 文件程序

function root=StevenSecant(f,a,b,eps)

if (nargin==3)

eps=1.0e-6;

end

f1=subs(sym(f),findsym(sym(f)),a);

f2=subs(sym(f),findsym(sym(f)),b);

if (f1==0)

root=a;

end

if (f2==0)

root=b;

end

if (f1*f2>0)

disp('两端点函数值乘积大于0!');

return ;

else

tol=1;

fa=subs(sym(f),findsym(sym(f)),a);

fb=subs(sym(f),findsym(sym(f)),b);

faa=subs(sym(f),findsym(sym(f)),fa+a);

root=a-fa*fa/(faa-fa);

while (tol>eps)

r1=root;

fx=subs(sym(f),findsym(sym(f)),r1);

v=fx+r1;

fxx=subs(sym(f),findsym(sym(f)),v); root=r1-fx*fx/(fxx-fx)

tol=abs(root-r1)

end

end

(3)输入程序

r=StevenSecant('x^5+x-1',0,1)

(4)输出结果

root =0.9395

tol =0.4395

root =0.8977

tol =0.0418

root =0.8502

tol =0.0474

root =0.8025

tol =0.0478

root =0.7678

tol =0.0347

root =0.7559

tol =0.0119

root =0.7549

tol =9.8056e-004

root =0.7549

tol =5.7782e-006

root =0.7549

tol =1.9837e-010

r =0.7549

相关文档
最新文档