科学与工程计算平时作业题及答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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