第二章作业.docx
- 文档编号:9382797
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:15
- 大小:485.07KB
第二章作业.docx
《第二章作业.docx》由会员分享,可在线阅读,更多相关《第二章作业.docx(15页珍藏版)》请在冰豆网上搜索。
第二章作业
第二章作业
题目重述:
如图所示的球形罐,罐内液体的体积可以如下计算:
其中h和V分别为液体高度和体积,R为球形罐的半径。
若R=3m,往空罐中注入30m2的液体,请计算罐内液体高度。
题目分析:
由于油罐的直径为6m,故液体高度h的范围是[0,6];显然在这个范围内,液体体积V关于h单调递增。
所以方程
只有一个解。
通过MATLAB内置solve函数,可求得当V=30时,解为h=2.0269057283100132979889868688183(不妨将其作为标准值),计算的代码如下:
symsh;
x=solve(30==pi*h^2*(3*3-h)/3,h)
vpa(x)
下面用以下五种方法分别计算:
二分法,试位法,不动点迭代,Newton-Raphson方法,割线法。
(注:
各种方法均以精确到小数点后10位为标准)
1、二分法
设函数
,显然f(h)关于h单调递减。
易求f(1.5)>0,f(2.5)<0,所以零点必在区间[1.5,2.5]内。
MATLAB代码如下:
clc;clear;
symsh;%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)<0
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轴的交点。
clc;clear;
symsh;%theindependentvaribleheight
f(h)=30-pi*h^2*(3-h/3);
low=1;high=3;%theinitiallowerandupperbounds
es=0.5*10^-10;%theprincipleof10significantdigits
poi=high-f(high)*(low-high)/(f(low)-f(high));%theestimateofzeropointvalue
temp=high;
i=0;
whileabs(temp-poi)>es
iff(poi)==0
break;
elseiff(poi)*f(low)<0
high=poi;
elselow=poi;
end
i=i+1;%thenumberofiterations
temp=poi;%storethelastestimatedvalue
poi=high-f(high)*(low-high)/(f(low)-f(high));
disp(vpa(poi,11));
end
经过10次迭代,最终计算值为2.0269057283,与标准值吻合。
为了形象地展现迭代过程,首先画出f(h)的图如下
然后在程序的while循环中加入以下代码:
line([low,high],[f(low),f(high)],'color','r');
得到的图像如下
局部放大图如下:
(注:
图像中红色的斜线是每次迭代时函数在区间上的端点的连线)
可见,在本例中,零点附近的函数图像是很接近直线的,在第一次迭代后更是如此;所以这种情况下,试位法的收敛速度(10次迭代)远优于二分法(34次迭代)。
3、不动点迭代
不动点迭代方法首先将方程
变换为
的形式,首先选取一个初始点x0,然后通过
的方法不断逼近真值。
有多种变换形式,但是不是所有的变换方式都能收敛。
下面分别取一种收敛和发散的变换方法来计算:
(1)方式1:
将方程变换为
,取初值3,代码如下:
clc;clear;
symsh;%theindependentvaribleheight
f(h)=((90+pi*h^3)/9/pi)^(1/2);
x=3;%theinitialestimatedvalue
es=0.5*10^-10;%theprincipleof10significantdigits
i=0;
temp=4;
whileabs(temp-x)>es
iff(x)==0
break;
else
temp=x;
x=f(x);
end
i=i+1;%thenumberofiterations
vx=vpa(x,11);
disp(vx)
end
迭代次数26次,最终计算结果为2.0269057283,与标准值吻合。
函数
和h的图像如下:
(2)方式2:
将方程变换为h
,取初值3,代码如下:
clc;clear;
symsh;%theindependentvaribleheight
f(h)=(9*h^2-90/pi)^(1/3);
x=5;%theinitialestimatedvalue
es=0.5*10^-10;%theprincipleof10significantdigits
i=0;
temp=4;
whileabs(temp-x)>es
iff(x)==0
break;
else
temp=x;
x=f(x);
end
i=i+1;%thenumberofiterations
vx=vpa(x,11);
disp(vx)
end
这种变换方式在所要求的值2.0269057283处不收敛,而是收敛在方程的另一零点8.6139066566处,所以不管怎么变换初始点的取值,都不能得到所要的结果。
函数
和h的图像如下:
具体的关于收敛性的判断准则在第3次上机作业中已描述,此处不再赘述。
4、Newton-Raphson方法
Newton-Raphson方法主要使用了泰勒级数的前两项近似来求根。
,令
,则
,即将函数图像在当前点的切线与x轴的交点作为下一个迭代点。
计算程序如下:
clc;clear;
symsh;%theindependentvaribleheight
f(h)=30-pi*h^2*(3-h/3);
df(h)=diff(f);%derivedfunctionoff(h)
es=0.5*10^-10;%theprincipleof10significantdigits
x=3;%theestimateofzeropointvalue
temp=4;%storethelastestimatedvalue
i=0;%thenumberofiterations
whileabs(temp-x)>es
iff(x)==0
break;
else
temp=x;
x=x-f(x)/df(x);
end
i=i+1;
vpa(x,11)
end
该方法只迭代了5次,便得到最终值2.0269057283,收敛速度远优于之前的各种方法。
下面用line函数画出迭代过程示意图:
line([temp,x],[f(temp),0],'color','r');holdon
line([temp,temp],[0,f(temp)],'color','r');
第2次迭代
第1次迭代
第2次迭代的局部放大图如下:
第3,4,5次迭代
第2次迭代
之后的迭代图像太密,就不一一画出了。
从图像中也可明显看出,在本例中,Newton-Raphson方法的收敛速度非常快,主要还是因为用泰勒级数前两项近似原函数具有很高的精度。
5、割线法
割线法的思想类似于Newton-Raphson方法,不过使用了差分来估计斜率,其迭代方法为
,
计算代码如下:
clc;clear;
symsh;%theindependentvaribleheight
f(h)=30-pi*h^2*(3-h/3);
x1=4;x2=3;%theinitialestimateofzeropointvalue
es=0.5*10^-10;%theprincipleof10significantdigits
i=0;
whileabs(x1-x2)>es
iff(x2)==0
break;
else
temp=x2;%storex2
x2=x2-f(x2)*(x2-x1)/(f(x2)-f(x1));
x1=temp;
end
i=i+1;%thenumberofiterations
vpoi=vpa(x2,11);
disp(vpoi);
end
迭代次数为5次,迭代次数也很快,最终值为2.0269057283,与标准值吻合。
小结:
1.对于二分法和试位法,均属于划界法,但是试位法的收敛速度还是明显要快于二分法,结合前面的图形和分析,这是因为在根附近的位置,函数图像接近于直线,此时使用试位法可以很快地收敛到真值附近,而二分法并不考虑区间端点对应的函数值。
即若函数在所求值附近的二阶导数越越接近于0,函数图像在所求值附近就越接近直线,收敛也就更快。
2.不动点迭代法的收敛性与收敛时的优劣性与所选取的变换方式相关。
对于是否收敛可根据不动点定理判断,而不同的变换方法可能有不同的收敛速度,一般单调收敛优于振荡收敛,在不同的方法中可择优选取。
3.Newton-Raphson方法在单根附近是二次收敛的,误差大致与前一次迭代的误差平方成正比,所有收敛速度远优于前面三种方法。
4.割线法使用了差分代替了Newton-Raphson方法中的导数,所以收敛速度稍弱于Newton-Raphson方法,但是还是很快。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第二 作业