第二章作业Word格式.docx
《第二章作业Word格式.docx》由会员分享,可在线阅读,更多相关《第二章作业Word格式.docx(15页珍藏版)》请在冰豆网上搜索。
(注:
各种方法均以精确到小数点后10位为标准)
1、二分法
设函数
,显然f(h)关于h单调递减。
易求f(1.5)>
0,f(2.5)<
0,所以零点必在区间[1.5,2.5]内。
MATLAB代码如下:
clc;
clear;
%theindependentvaribleheight
low=1.5;
high=2.5;
%theinitiallowerandupperbounds
es=0.5*10^-10;
%theprincipleof10significantdigits
mid=(high+low)/2;
%theestimateofzeropointvalue
temp=high;
f(h)=30-pi*h^2*(3-h/3);
i=0;
while(abs(temp-mid)>
es)
iff(mid)==0
break;
elseiff(mid)*f(low)<
high=mid;
elselow=mid;
end
i=i+1;
%thenumberofiterations
temp=mid;
%storethelastestimatedvalue
mid=(high+low)/2;
fprintf('
%.10f\n'
mid);
end
共迭代34次,最终计算值为2.0269057283,与标准值吻合。
在while循环中的第1行加入以下代码,可以作出每次迭代后的取值区间:
line([low,high],[f(mid),f(mid)]);
图形形象地反映出迭代过程,如下所示:
横坐标是每次迭代的估计值的取值区间,纵坐标是取值区间中点对应的f(h)函数值)
第5次迭代
第4次迭代
第3次迭代
第2次迭代
第1次迭代
初始区间
2、试位法
试位法也利用了迭代思想,不过估计值的取值不是在区间中点,而是函数图像在区间上的两个端点连线与x轴的交点。
low=1;
high=3;
poi=high-f(high)*(low-high)/(f(low)-f(high));
whileabs(temp-poi)>
es
iff(poi)==0
elseiff(poi)*f(low)<
high=poi;
elselow=poi;
temp=poi;
poi=high-f(high)*(low-high)/(f(low)-f(high));
disp(vpa(poi,11));
经过10次迭代,最终计算值为2.0269057283,与标准值吻合。
为了形象地展现迭代过程,首先画出f(h)的图如下
然后在程序的while循环中加入以下代码:
line([low,high],[f(low),f(high)],'
color'
'
r'
);
得到的图像如下
局部放大图如下:
图像中红色的斜线是每次迭代时函数在区间上的端点的连线)
可见,在本例中,零点附近的函数图像是很接近直线的,在第一次迭代后更是如此;
所以这种情况下,试位法的收敛速度(10次迭代)远优于二分法(34次迭代)。
3、不动点迭代
不动点迭代方法首先将方程
变换为
的形式,首先选取一个初始点x0,然后通过
的方法不断逼近真值。
有多种变换形式,但是不是所有的变换方式都能收敛。
下面分别取一种收敛和发散的变换方法来计算:
(1)方式1:
将方程变换为
,取初值3,代码如下:
f(h)=((90+pi*h^3)/9/pi)^(1/2);
x=3;
%theinitialestimatedvalue
temp=4;
whileabs(temp-x)>
iff(x)==0
else
temp=x;
x=f(x);
vx=vpa(x,11);
disp(vx)
迭代次数26次,最终计算结果为2.0269057283,与标准值吻合。
函数
和h的图像如下:
(2)方式2:
将方程变换为h
f(h)=(9*h^2-90/pi)^(1/3);
x=5;
这种变换方式在所要求的值2.0269057283处不收敛,而是收敛在方程的另一零点8.6139066566处,所以不管怎么变换初始点的取值,都不能得到所要的结果。
具体的关于收敛性的判断准则在第3次上机作业中已描述,此处不再赘述。
4、Newton-Raphson方法
Newton-Raphson方法主要使用了泰勒级数的前两项近似来求根。
,令
,则
,即将函数图像在当前点的切线与x轴的交点作为下一个迭代点。
计算程序如下:
df(h)=diff(f);
%derivedfunctionoff(h)
x=x-f(x)/df(x);
vpa(x,11)
该方法只迭代了5次,便得到最终值2.0269057283,收敛速度远优于之前的各种方法。
下面用line函数画出迭代过程示意图:
line([temp,x],[f(temp),0],'
holdon
line([temp,temp],[0,f(temp)],'
第2次迭代的局部放大图如下:
第3,4,5次迭代
之后的迭代图像太密,就不一一画出了。
从图像中也可明显看出,在本例中,Newton-Raphson方法的收敛速度非常快,主要还是因为用泰勒级数前两项近似原函数具有很高的精度。
5、割线法
割线法的思想类似于Newton-Raphson方法,不过使用了差分来估计斜率,其迭代方法为
,
计算代码如下:
x1=4;
x2=3;
%theinitialestimateofzeropointvalue
whileabs(x1-x2)>
iff(x2)==0
temp=x2;
%storex2
x2=x2-f(x2)*(x2-x1)/(f(x2)-f(x1));
x1=temp;
vpoi=vpa(x2,11);
disp(vpoi);
迭代次数为5次,迭代次数也很快,最终值为2.0269057283,与标准值吻合。
小结:
1.对于二分法和试位法,均属于划界法,但是试位法的收敛速度还是明显要快于二分法,结合前面的图形和分析,这是因为在根附近的位置,函数图像接近于直线,此时使用试位法可以很快地收敛到真值附近,而二分法并不考虑区间端点对应的函数值。
即若函数在所求值附近的二阶导数越越接近于0,函数图像在所求值附近就越接近直线,收敛也就更快。
2.不动点迭代法的收敛性与收敛时的优劣性与所选取的变换方式相关。
对于是否收敛可根据不动点定理判断,而不同的变换方法可能有不同的收敛速度,一般单调收敛优于振荡收敛,在不同的方法中可择优选取。
3.Newton-Raphson方法在单根附近是二次收敛的,误差大致与前一次迭代的误差平方成正比,所有收敛速度远优于前面三种方法。
4.割线法使用了差分代替了Newton-Raphson方法中的导数,所以收敛速度稍弱于Newton-Raphson方法,但是还是很快。