数值分析实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数值分析实验报告
(第二章)
实验题目:
分别用二分法、牛顿迭代法、割线法、史蒂芬森迭代法求方程
f x=x2+1x−15=0
的根x=1,观察不同初始值下的收敛性,并给出结论。
问题分析:
题目有以下几点要求:
1.不同的迭代法计算根,并比较收敛性。
2.选定不同的初始值,比较收敛性。
实验原理:
各个迭代法简述
二分法:取有根区间[a,b]的重点x0,确定新的有根区间[a1,b1]的区间长度仅为[a,b]区间长度的一版。对压缩了的有根区间[a1,b1]重复以上过程,又得到新的有根区间[a2,b2],其区间长度为[a1,b1]的一半,如此反复,……,可得一系列有根区间,区间收敛到一个点即为根。
牛顿迭代法:不动点迭代法的一种特例,具有局部二次收敛的特性。迭代格式为
x n+1=x n−f x n
f′x n
,n=0,1,2,…
割线法:是牛顿法的改进,具有超线性收敛的特性,收敛阶为1.618. 迭代格式为
x n+1=x n−
f x n
n n−1
x n−x n−1,n=1,2,…
史蒂芬森迭代法:采用不动点迭代进行预估校正。至少是平方收敛的。迭代格式为
y n=φx n
z n=φy n
x n+1=x n−
(y n−x n)2 z n−2y n+x n
这里φx可采用牛顿迭代法的迭代函数。实验内容:
1.写出该问题的f x函数代码如下:
function py= f(x) syms k;
y=(k^2+1)*(k-1)^5;
yy=diff(y,k);
py(1)=subs(y,k,x);
py(2)=subs(yy,k,x); end
2.分别写出各个迭代法的迭代函数代码如下:
二分法:
function y=dichotomie(a,b,e) i=2;
m(1)=a;
while abs(a-b)>e
t=(a+b)/2;
s1=f(a);
s2=f(b);
s3=f(t);
if s1(1)*s3(1)<=0
b=t;
else
a=t;
end
m(i)=t;
i=i+1;
end
y=[t,i+1,m];
end
牛顿迭代法:
function
y=NewtonIterative(x,e)
i=2;
en=2*e;m(1)=x;
while abs(en)>=e
s=f(x);
t=x-s(1)/s(2);
en=t-x;
x=t;
m(i)=t;
i=i+1;
end
y=[x,i+1,m];
end
牛顿割线法:
function y=Secant(x1,x2,e) i=3;
m(1)=x1,m(2)=x2;
while abs(x2-x1)>=e
s1=f(x1);
s2=f(x2);
t=x2-(x2-x1)*s2(1)/(s2(1)-s1( 1));
x1=x2;
x2=t;
m(i)=t;
i=i+1;
end
y=[x2,i+1,m];
end
史蒂芬森迭代法:
Function p=StephensonIterative (x,e)
i=2;
m(2)=x;
en=2*e;
while abs(en)>=e
y=fai(x); z=fai(y);
t=x-(y-x)^2/(z-2*y+x); en=t-x;
x=t;
m(i)=t;
i=i+1;
end
p=[x,i+1,m];
end
3.因为φx经常被使用,故可以写一个φx函数。
代码如下:
function y=fai(x)
s=f(x);
y=x-s(1)/s(2);
end
4.可以绘制不同的图形来比较不同迭代法的收敛性和不同初值下的收敛性。代码如下:
clear all;
%相同初始值,不同迭代法下的收敛
x1=dichotomie(0,3,1e-10);
x2=NewtonIterative(0,1e-10);
x3=Secant(0,2,1e-10);
x4=StephensonIterative(0,1e-10);
[x1(2),x2(2),x3(2),x4(2)]
figure,
subplot(2,2,1),plot(x1(3:x1(2))),title('二分法');
subplot(2,2,2),plot(x2(3:x2(2))),title('牛顿迭代法');
subplot(2,2,3),plot(x3(3:x3(2))),title('牛顿割线法');
subplot(2,2,4),plot(x4(3:x4(2))),title('史蒂芬森迭代法');
figure,
subplot(2,2,1),plot((x1(4:x1(2)-1)-x1(1))./(x1(3:x1(2)-2)-x1(1))),tit le('二分法');
subplot(2,2,2),plot((x2(4:x2(2)-1)-x2(1))./(x2(3:x2(2)-2)-x2(1))),tit le('牛顿迭代法');
subplot(2,2,3),plot((x3(4:x3(2)-1)-x3(1))./(x3(3:x3(2)-2)-x3(1))),tit