数值计算方法上机题目11、实验1.病态问题1、实验1.病态问题实验目的:算法有“优”与“劣”之分,问题也有“好”和“坏”之别。所谓坏问题就是问题本身的解对数据变化的比较敏感,反之属于好问题。希望读者通过本实验对此有一个初步的体会。数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。问题提出:考虑一个高次的代数多项式201)()20)...(2)(1()(kkxxxxxp(E1-1)显然该多项式的全部根为l,2,…,20,共计20个,且每个根都是单重的(也称为简单的)。现考虑该多项式方程的一个扰动0)(19xxp(E1-2)其中是一个非常小的数。这相当于是对(E1-1)中19x的系数作一个小的扰动。我们希望比较(E1-1)和(E1-2)根的差别,从而分析方程(E1-1)的解对扰动的敏感性。实验内容:为了实现方便,我们先介绍两个Matlab函数:“roots”和“poly”,输入函数u=roots(a)其中若变量a存储1n维的向量,则该函数的输出u为一个n维的向量。设a的元素依次为121,...,,naaa,则输出u的各分量是多项式方程0...1121nnnnaxaxaxa的全部根,而函数b=poly(v)的输出b是一个n+1维变量,它是以n维变量v的各分量为根的多项式的系数。可见“roots”和“Poly”是两个互逆的运算函数.ve=zeros(1,21);ve(2)=ess;roots(poly(1:20))+ve)上述简单的Matlab程序便得到(E1-2)的全部根,程序中的“ess”即是(E1-2)中的。实验要求:(1)选择充分小的ess,反复进行上述实验,记录结果的变化并分析它们。如果扰动项的系数很小,我们自然感觉(E1-1)和(E1-2)的解应当相差很小。计算中你有什么出乎意料的发现?表明有些解关于如此的扰动敏感性如何?1.如程序Wjj-1.m所示,给19x的系数一个扰动时,解会产生变化。扰动越小,解与真实值越接近。当扰动增加到一定值,解会变成负数,在所做的给19x的系数一个扰动的实验中,当该扰动大于10^-11时,产生复数解。2.将扰动项改成18x,解同样会发生变化。扰动越小,解的变化越小,当扰动增加到一定值,解会变成负数,在所做的给18x的系数一个扰动的实验中,当该扰动大于10^-9时,产生复数解。3.解关于的导数的绝对值越大,解关于的扰动越敏感。18、17、16、15、14、13、12、11等根关于更敏感。formatshortve=zeros(1,21);a=zeros(20,4);k=1;fori=-20:5:-5ess=10^i;ve(2)=ess;a(1:20,k)=roots((poly(1:20))+ve);k=k+1;end2、实验2。多项式插值的振荡现象,即插值的龙格(Runge)现象问题提出:考虑在一个固定的区间上用插值逼近一个函数。显然,拉格朗日插值中使用的节点越多,插值多项式的次数就越高、自然关心插值多项式的次数增加时,)(xLn是否也更加靠近被逼近的函数。龙格给出的一个例子是极著名并富有启发性的。设区间]1,1[上函数22511)(xxf实验内容:考虑区间]1,1[的一个等距划分,分点为ninixi,...,2,1,0,21则拉格朗日插值多项式为niiinxlxxL02)(2511)(其中的)(xli,ni,...,2,1,0是n次拉格朗日插值基函数。实验要求:(l)选择不断增大的分点数目,...3,2n,画出原函数)(xf及插值多项式函数)(xLn在]1,1[上的图像,比较并分析实验结果。多项式插值的振荡现象,即插值的龙格(Runge)现象1.当你分别取5,11,21,41时,原函数f(x)及插值多项式函数Ln(x)在[-1,1]上的图像如下:图1.原函数图像f(x)图2.插值多项式函数L5(x)图3.插值多项式函数L11(x)图4.插值多项式函数L21(x)图5.插值多项式函数L41(x)从图中可以看出随着n的增加,大约在区间[-0.6,0.6]上差值函数与原函数越来越逼近,但在两段出现振荡现象。这说明,插值节点个数并不是越多越好。2.对于函数41)(xxxh而言,n分别取6,11,21时原函数h(x)及插值多项式函数Ln(x)在[-5,5]上的图像如下图6.原函数图像h(x)图7.L6(x)图8.L11(x)图9.L21(x)3.对于xxgarctan)(而言,n分别取3,11,21时原函数g(x)及插值多项式函数Ln(x)在[-5,5]上的图像如下:图10.g(x)与Ln(x)通过对h(x),g(x)的分析,我们可以得到与f(x)相同的结论,取等距插值节点时,插值节点越多,会产生扰动。即,插值节点越多,不一定越好。3.以切比雪夫点为插值节点构造上述各函数的拉格朗日插值多项式n取3、11、21时f(x)与差值函数图像如下.图11.f(x)与插值函数n取11、21时,h(x)与插值函数的图像如下:图12.h(x)与插值函数n取11、21时,g(x)与插值函数的图像如下:图13.g(x)与插值函数上述情况表明,插值函数的好坏与插值节点的选取有很大关系。对比发现,对于差值出现振荡的多项式,选取切比雪夫点能更好的逼近原函数。程序:clear;clc;clf;symsxyls='bkgmcyrbk';u='------:::';x=-1:0.01:1;f=1./(1+25.*(x).^2);plot(x,f,'r-');holdonforn=2:10y=0;fori=-1:2/n:1l=1;forj=-1:2/n:1ifi~=jl=l.*(x-j)/(i-j);endendy=y+l./(1+25.*i.^2);end3、实验3。样条插值的收敛性问题提出:一般的多项式插值不能保证收敛性,即插值的节点多,效果不一定就好。对样条函数插值又如何呢?理论上证明样条插值的收敛性是比较困难的,也超出了本课程的内容。通过本实验可以验证这一理论结果。实验内容:请按一定的规则分别选择等距或者非等距的插值节点,并不断增加插值节点的个数。考虑实验2.中的函数或选择其它你有兴趣的函数,可以用Matab的函数“spline”作此函数的三次样条插值。在较新版本的Matlab中,还提供有spline工具箱,你可以找到极丰富的样条工具,包括B-样条。实验要求:(1)随节点个数增加,比较被逼近函数和样条插值函数误差变化情况。分析所得结果并与拉格朗目多项式插值比较。1.以第二题中f(x)函数为例,分析样条插值函数。并比较样条插值函数与拉格朗日多项式插值函数的与原函数的逼近情况。从上图中可知,样条插值函数比拉格朗日多项式插值函数更逼近原函数。2.车门曲线clear;clc;clf;symsxyls='bkgmcyrbk';u='------:::';a=-1;b=1;x=-1:0.01:1;f=1./(1+25.*(x).^2);plot(x,f,'r-');holdonforn=2:10X=zeros(n+1,1);form=1:n+1X(m)=(a+b)/2+((b-a)/2).*cos((2*m-1).*pi./(2*(n+1)));endy=0;fori=1:n+1l=1;forj=1:n+1ifi~=jl=l.*(x-X(j))/(X(i)-X(j));endendy=y+l./(1+25.*X(i).^2);endx=-1:0.01:1;plot(x,y,[s(n-1)u(n-1)]);holdonendlegend('f(x)','n=2','n=3','n=4','n=5','n=6','n=7','n=8','n=9','n=10',-1);