数值分析实验报告Word格式.docx
- 文档编号:17381301
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:16
- 大小:204.59KB
数值分析实验报告Word格式.docx
《数值分析实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《数值分析实验报告Word格式.docx(16页珍藏版)》请在冰豆网上搜索。
});
Numb=str2num(char(result));
if((Numb>
20)|(Numb<
0))errordlg('
请输入正确的扰动项:
[020]之间的整数!
);
return;
end
请输入(01)之间的扰动常数:
0.00001'
ess=str2num(char(result));
ve=zeros(1,21);
ve(21-Numb)=ess;
root=roots(poly(1:
20)+ve);
x0=real(root);
y0=imag(root);
plot(x0'
y0'
'
*'
disp(['
对扰动项'
num2str(Numb),'
加扰动'
num2str(ess),'
得到的全部根为:
]);
disp(num2str(root));
(二)实验结果分析
(1)对于x19项的扰动ess,不同的取值对应的结果如下所示。
●对扰动项19加扰动1e-010得到的全部根为:
19.9961,19.0257,17.9085,17.1508,15.7982,15.181,13.8995,13.0571,11.9753,11.0109,9.99608,9.00111,7.99978,7.00003,6,5,4,3,2,1。
●对扰动项19加扰动1e-009得到的全部根为:
19.952,19.2293,17.6573+0.692896i,17.6573-0.692896i,15.4524+0.875524i,15.4524-0.875524i,13.3527+0.486992i,13.3527-0.486992i,11.8578,11.0427,9.9916,9.00201,7.99952,7.00009,5.99999,5,4,3,2,1。
●对扰动项19加扰动1e-007得到的全部根为:
20.422+0.999203i,20.422-0.999203i,18.1572+2.4702i,18.1572-2.4702i,15.3149+2.69865i,15.3149-2.69865i,12.8466+2.06246i,12.8466-2.06246i,10.9216+1.10366i,10.9216-1.10366i,9.56629,9.11508,7.99387,7.00027,6,5,4,3,2,1。
●对扰动项19加扰动1e-005得到的全部根为:
22.5961+2.3083i,22.5961-2.3083i,18.8972+5.00563i,18.8972-5.00563i,14.9123+4.95848i,14.9123-4.95848i,12.0289+3.73551i,12.0289-3.73551i,10.059+2.33021i,10.059-2.33021i,8.63828+1.0564i,8.63828-1.0564i,7.70896,7.028,5.99942,5.00001,4,3,2,1。
根在复平面上的位置如图所示:
图ess=1e-010图ess=1e-009
图ess=1e-007图ess=1e-005
从实验的图形中可以看出,当ess充分小时,方程E.1.1和方程E.1.2的解相差很小,当ess逐渐增大时,方程的解就出现了病态解,这些解都呈现复共轭性质。
并且,病态解首先出现在x=16这个解附近,如ess=1e-009时,x=20,19,12,11,…,2,1的解基本误差不大。
在x=16附近,扰动后的解偏离实轴程度较严重,随着ess的增大,扰动对解的影响从x=16附近开始向两边波及,并且偏离实轴的幅度越来越大。
x=0,1,2,3,4,5这些阶次较小的解对x19上的扰动最不敏感。
(2)将扰动项加到x18上后,ess=1e-009时方程的解都比较准确,没有出现复共轭现象。
ess=1e-008时误差与x19(ess=1e-009)时相当,即扰动加到x18上比加到x19小一个数量级。
对x8的扰动ess=1000时没有出现复共轭,误差很小;
对x的扰动ess=10e10时没有出现复共轭,误差很小。
因此,扰动作用到xn上时,n越小,扰动引起的误差越小。
(3)
令
(E.3.1)
的零点均为ε的函数,分别它们记为
,显然有
。
研究
关于ε的变化情况,将
表示为
(E.3.2)
关于ε的变化或敏感程度可以用其导数表示,故在(E.3.2)两边关于ε求导:
(E.3.3)
为了知道原方程的根是如何受扰动ε的影响,需要知道
在(E.3.3)两边令ε
,得到
(E.3.4)
在令
,则得
,即
(E.3.5)
由于
,故
(E.3.6)
计算表明,对根1,此导数的绝对值只有
,极其微小;
但从第7个根起,此导数的绝对值就从
开始,最大直到
,非常大!
所以必定造成病态。
这就是根源。
现在来估计扰动对根的影响。
对根
的影响,由(E.3.5)可得条件数
(E.3.7)
经过计算发现,扰动对
的影响最大,对
的影响最小,与实际计算结果一致。
实验1.2误差传播与算法稳定性
实验目的:
体会稳定性在选择算法中的地位。
误差扩张的算法是不稳定的,是我们所不期望的;
误差衰竭的算法是稳定的,是我们努力寻求的。
实验内容:
考虑一个由积分定义的序列
(E.1.4)
显然En>
0,n=1,2,…当n=1时,利用部分积分得E1=1/e。
而对n≥2,经分部积分可得递推关系En=1-nEn-1,n=2,3,…(E.1.5)
由式(E.1.4)得En≤1/(n+1)。
由递推关系式(E.1.5),可得计算式(E.1.4)积分序列{En}的两种算法。
其一为式(E.1.5)的直接应用,即
E1=1/e,En=1–nEn-1,n=2,3,…(E.1.7)
另一种算法则是利用式(E.1.5)变形得到
EN=0,En-1=(1-En)/n,n=N-1,N-2,…,3,2.(E.1.8)
实验步骤及结果分析:
(一)实验源程序
functiont_charpt1_2
%数值实验1.2:
误差传播与算法稳定性
%输入:
递推式选择及递推步数
各步递推值及误差结果,以及递推值和误差与递推步数的关系图
promps={'
请选择递推关系式,若选E.1.7,请输入1,否则输入2:
};
result=inputdlg(promps,'
charpt1_2'
1'
Nb=str2num(char(result));
if((Nb~=1)&
(Nb~=2))errordlg('
请选择递推关系式,若选E.1.7,请输入1,否则输入2!
请输入递推步数n:
10'
steps=str2num(char(result));
if(steps<
1)errordlg('
递推步数错误!
result=zeros(1,steps);
err=result;
if(Nb==1)
n=1;
result(n)=1/exp
(1);
while(n<
steps)
result(n+1)=1-n*result(n);
err(n+1)=abs(result(n+1)-func(n+1));
n=n+1;
end
elseif(Nb==2)
n=steps;
err(n)=abs(result(n)-func(n));
while(n>
1)
result(n-1)=(1-result(n))/n;
err(n-1)=abs(result(n-1)-func(n-1));
n=n-1;
递推值:
num2str(result)]);
误差:
num2str(err)]);
plot([1:
steps],result,'
-'
gridon
holdon;
steps],err,'
r--'
xlabel('
n'
ylabel('
En-andERRn--'
text(2,err
(2),'
\uparrowerr(n)'
text(4,result(4),'
\downarrowEn'
%------------------------------------------------------------------
functionen=func(n)
%计算En的精确值
if(n==1)
en=1/exp
(1);
else
en=1-n*func(n-1);
(二)实验结果分析
(1)分别用算法(E.1.7)、算法(E.1.8)计算得到的结果如图所示。
图算法(E.1.7)结果图算法(E.1.8)结果
两种算法的得到的结果数据如下:
●算法(E.1.7):
0.3678794410.632120559-0.2642411181.79272335-6.1708934131.8544671-190.1268021331.88762-10654.100995887.9084
00.3678794410.4715177651.621829946.3164263531.7276647190.2391861331.7866810654.192595887.8245
●算法(E.1.8):
0.367880.264240.207280.170890.145540.126790.11250.10.10
2.3114e-0084.6229e-0081.3869e-0075.5474e-0072.7737e-0061.6642e-0050.00011650.000931970.00838770.083877
显然可以看出,算法(E.1.8)可以给出精确的结果,算法(E.1.8)虽然迭代的第一次EN的误差可能比较大,但EN-1的误差就急剧缩小,后面的误差都很小;
而算法(E.1.7)的误差却是逐渐增大的,E10的误差居然达到了惊人的9.6x104。
(2)两种算法的优劣与第一感觉是吻合的。
理论上分析如下:
算法(E.1.7):
En=1–nEn-1,因此误差en=|En-En*|=n|En-1-En-1*|=n!
|E1-E1*|=n!
e1。
可见误差的传递呈n的阶乘增大,算法是不稳定的。
算法(E.1.8):
En-1=(1-En)/n,因此误差
因此算法的误差是逐级递减的,当N取的比较大时,即使初始EN的误差很大,计算的En的误差也会很小,因此算法是稳定的。
(3)算法(E.1.7)中即使e1很小,由于n增大时,误差呈n倍增大,因此算法(E.1.7)的误差对后面的影响是扩张的。
算法(E.1.8)中即使eN很大,由于误差呈1/n递减,因此算法(E.1.8)的误差对后面的影响是衰减的。
(4)综合上面的分析,算法(E.1.7)是不稳定的,算法(E.1.8)是稳定的。
数值实验题2
实验2.1多项式插值的振荡现象
在一个固定的区间上用插值逼近一个函数,显然Lagrange插值中使用的节点越多,插值多项式的次数就越高。
我们自然关心插值多项式的次数增加时,Ln(x)是否也更加靠近被逼近的函数。
Runge给出的一个例子是极著名并富有启发性的。
设区间[-1,1]上函数f(x)=1/(1+25x2)。
考虑区间[-1,1]的一个等距划分,分点为xi=-1+2i/n,i=0,1,2,…,n,
则拉格朗日插值多项式为
.
其中,li(x),i=0,1,2,…,n是n次Lagrange插值基函数。
(三)实验源程序
functiont_charpt2
%数值实验二:
“实验2.1:
多项式插值的震荡现象”
函数式选择,插值结点数
拟合函数及原函数的图形
promps={'
请选择实验函数,若选f(x),请输入f,若选h(x),请输入h,若选g(x),请输入g:
titles='
charpt_2'
;
result=inputdlg(promps,'
charpt2'
f'
Nb_f=char(result);
if(Nb_f~='
&
Nb_f~='
h'
g'
)errordlg('
实验函数选择错误!
result=inputdlg({'
请输入插值结点数N:
Nd=str2num(char(result));
if(Nd<
结点输入错误!
switchNb_f
case'
f=inline('
1./(1+25*x.^2)'
a=-1;
b=1;
x./(1+x.^4)'
a=-5;
b=5;
atan(x)'
b=5;
x0=linspace(a,b,Nd+1);
y0=feval(f,x0);
x=a:
0.1:
b;
y=Lagrange(x0,y0,x);
fplot(f,[ab],'
co'
holdon;
plot(x,y,'
b--'
xlabel('
x'
y=f(x)oandy=Ln(x)--'
%--------------------------------------------------------------------
functiony=Lagrange(x0,y0,x);
%Lagrange插值
n=length(x0);
m=length(x);
fori=1:
m
z=x(i);
s=0.0;
fork=1:
n
p=1.0;
forj=1:
if(j~=k)
p=p*(z-x0(j))/(x0(k)-x0(j));
s=s+p*y0(k);
y(i)=s;
(1)增大分点n=2,3,…时,拉格朗日插值函数曲线如图所示。
n=3n=6
n=7n=8
n=9n=10
从图中可以看出,随着n的增大,拉格朗日插值函数在x=0附近较好地逼近了原来的函数f(x),但是却在两端x=-1和x=1处出现了很大的振荡现象。
并且,仔细分析图形,可以看出,当n为奇数时,虽然有振荡,但振荡的幅度不算太大,n为偶数时,其振荡幅度变得很大。
通过思考分析,我认为,可能的原因是f(x)本身是偶函数,如果n为奇数,那么Lagrange插值函数Ln(x)的最高次项xn-1是偶次幂,比较符合f(x)本身是偶函数的性质;
如果n为偶数,那么Lagrange插值函数Ln(x)的最高次项xn-1是奇次幂,与f(x)本身是偶函数的性质相反,因此振荡可能更剧烈。
(2)将原来的f(x)换为其他函数如h(x)、g(x),结果如图所示。
其中h(x),g(x)均定义在[-5,5]区间上,h(x)=x/(1+x4),g(x)=arctanx。
h(x),n=7h(x),n=8
h(x),n=9h(x),n=10
g(x),n=8g(x),n=9
g(x),n=12g(x),n=13
分析两个函数的插值图形,可以看出:
随着n的增大,拉格朗日插值函数在x=0附近较好地逼近了原来的函数f(x),但是却在两端x=-5和x=5处出现了很大的振荡现象。
并且,仔细分析图形,可以看出,当n为偶数时,虽然有振荡,但振荡的幅度不算太大,n为奇数时,其振荡幅度变得很大。
原因和上面f(x)的插值类似,h(x)、g(x)本身是奇函数,如果n为偶数,那么Lagrange插值函数Ln(x)的最高次项xn-1是奇次幂,比较符合h(x)、g(x)本身是奇函数的性质;
如果n为奇数,那么Lagrange插值函数Ln(x)的最高次项xn-1是偶次幂,与h(x)、g(x)本身是奇函数的性质相反,因此振荡可能更剧烈。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 实验 报告