实验一误差分析实验1.1(病态问题)实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。
对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。
通过本实验可获得一个初步体会。
数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。
病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。
问题提出:考虑一个高次的代数多项式显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。
现考虑该多项式的一个扰动其中ε(1.1)和(1.221,,,a a 的输出b ”和“poly ε。
(1(2 (3)写成展关于αsolve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考Matlab 的帮助。
实验过程:程序:a=poly(1:20); rr=roots(a); forn=2:21 nform=1:9ess=10^(-6-m);ve=zeros(1,21); ve(n)=ess;r=roots(a+ve);-6-ms=max(abs(r-rr))endend利用符号函数:(思考题一)a=poly(1:20);y=poly2sym(a);rr=solve(y)n很容易的得出对一个多次的代数多项式的其中某一项进行很小的扰动,对其多项式的根会有一定的扰动的,所以对于这类病态问题可以借助于MATLAB来进行问题的分析。
学号:06450210姓名:万轩实验二插值法实验2.1(多项式插值的振荡现象)问题提出:考虑一个固定的区间上用插值逼近一个函数。
显然拉格朗日插值中使用的节点越多,插值多项式的次数就越高。
我们自然关心插值多项式的次数增加时,L(x)是否也更加靠近被逼近的函数。
龙格给出了一个极着名例子。
设区间[-1,1]上函数f(x)=1/(1+25x^2)实验内容:考虑区间[-1,1]的一个等距划分,分点为:x(i)=-1+2i/n,i=0,1,2…,n泽拉格朗日插值多项式为:L(x)=∑l(i)(x)/(1+25x(j)^2)i=0,1,…ntitle('longn=24')elseifm==5title('longn=30')elseifm==6title('longn=36')end%对每个窗口分别写上标题为插值点的个数end保存为:chazhi.mfunctionlargrang(longn)mm=input('pleaseinputmm(运行第几个函数就输入mm为几):mm=') ifmm==1%d表示定义域的边界值d=1;elseifmm==2||mm==3d=5;endx0=linspace(-d,d,longn);%x的节点ifmm==1y0=1./(1.+25.*x0.^2);elseifmm==2保存为:largrang.m数值实验结果及分析:对于第一个函数f(x)=1/(1+25x2)对于第二个函数h(x)=x/(1+x4)对于第三个函数g(x)=arctan(x)讨论:通过对三个函数得出的largrang插值多项式并在数学软件中的运行,得出函数图象,说明了对函数的支点不是越多越好,而是在函数的两端而言支点越多,而largrang插值多项式不是更加靠近被逼近的函数,反而更加远离函数,在函数两端的跳动性更加明显,argrang插值多项式对函数不收敛。
实验总结:利用MATLAB来进行函数的largrang插值多项式问题的实验,虽然其得出的结果是有误差的,但是增加支点的个数进行多次实验,可以找出函数的largrang插值多项式的一般规律,当支点增加时,largrang插值多项式对函数两端不收敛,尽可能小的元素作为主元,观察并记录计算结果。
若每步消去过程总选取按模最大的元素作为主元,结果又如何?分析实验的结果。
(3)取矩阵阶数n=20或者更大,重复上述实验过程,观察记录并分析不同的问题及消去过程中选择不同的主元时计算结果的差异,说明主元素的选取在消去过程中的作用。
(4)选取其他你感兴趣的问题或者随机生成矩阵,计算其条件数。
重复上述实验,观察记录并分析实验结果。
实验过程:程序:建立M文件:functionx=gauss(n,r)n=input('请输入矩阵A的阶数:n=')A=diag(6*ones(1,n))+diag(ones(1,n-1),1)+diag(8*ones(1,n-1),-1) b=A*ones(n,1)p=input('条件数对应的范数是p-范数:p=')pp=cond(A,p)pauseend数值实验结果及分析:⑴取矩阵A的阶数:n=10,自动选取主元:>>formatlong>>gauss请输入矩阵A的阶数:n=10n=10条件数对应的范数是p-范数:p=1p=1pp=请输入是否为手动,手动输入1,自动输入0:r=0 r=0⑵取矩阵A的阶数:n=10,手动选取主元:①选取绝对值最大的元素为主元:>>gauss请输入矩阵A的阶数:n=10n=10条件数对应的范数是p-范数:p=2pp=ans=11111111111111111111②选取绝对值最小的元素为主元:>>gauss请输入矩阵A的阶数:n=20.n=20条件数对应的范数是p-范数:p=2p=2pp=请输入是否为手动,手动输入1,自动输入0:r=1r=1ans=1.000000000000001.000000000000001.000000000000001.000000000000001.000000000000001.000000000000001.000000000000011.00000000000006 999891.000000000000231.000000000000901.000000000003521.000000000012731.00000000002910⑷将M文件中的第三行:1.000000001211431.00000000152825该问题在主元选取与算出结果有着很大的关系,取绝对值大的元素作为主元比取绝对值小的元素作为主元时产生的结果比较准确,即选取绝对值小的主元时结果产生了较大的误差,条件数越大产生的误差就越大。
讨论:在gauss消去法解线性方程组时,主元的选择与算法的稳定性有密切的联系,选取绝对值大的元素作为主元比绝对值小的元素作为主元时对结果产生的误差较小。
条件数越大对用gauss消去法解线性方程组时,对结果产生的误差就越大。
实验总结:对用gauss消去法解线性方程组时,主元的选取与算法的稳定性有密切的联系,选取适当的主元有利于得出稳定的算法,在算法的过程中,选取绝对值较大的主元比选取绝对值较小的主元更有利于算法的稳定,选取绝对值最大的元素作为主元时,得出的结果相对较准确较稳定。
条件数越小,对用这种方法得出的结果更准确。
在算除法的过程中要尽量避免使用较小的数做为除数,以免发生结果数量级加大,使大数吃掉小数,产生舍入误差。
理论估计,并将它与(1)给出的计算结果进行比较,分析所得结果。
注意,如果给出了cond(A)和A的估计,马上就可以给出1-A的估计。
(4)估计着名的Hilbert矩阵的条件数。
实验过程:程序:⑴n=input('pleaseinputn:n=')%输入矩阵的阶数a=fix(100*rand(n))+1%随机生成一个矩阵ax=ones(n,1)%假设知道方程组的解全为1b=a*x%用矩阵a和以知解得出矩阵bdata=rand(n)*0.00001%随即生成扰动矩阵data datb=rand(n,1)*0.00001%随即生成扰动矩阵datb A=a+dataB=b+datbxx=geshow(A,B)%解扰动后的解end保存为:cond2.mformatlongforn=10:10:100n=n%n为矩阵的阶A=fix(100*randn(n));%随机生成矩阵A condestA=condest(A)%用condest求条件数cond2(A)%用自定义的求条件数condA2=cond(A,2)%用cond求条件数pause%运行一次暂停end保存为:shiyan52.m⑶n=input('pleaseinputn:n=')%输入矩阵的阶数a=fix(100*rand(n))+1;%随机生成一个矩阵ax=ones(n,1);%假设知道方程组的解全为1b=a*x;%用矩阵a和以知解得出矩阵bdata=rand(n)*0.00001;%随即生成扰动矩阵data datb=rand(n,1)*0.00001;%随即生成扰动矩阵datb>>fanshupleaseinputn:n=6n=6a=14251688198932938548926014408850131623521929232401010073724 1437227701 x=111111 b=251410221157218187 data=1.0e-005* datb=1.0e-005*n=8 x0= x00= datx= 给出对xx x xx -=∆ˆ的估计是:xx x xx -=∆ˆ的理论结果是:结果相差:(4)实验目的:初步认识非线性问题的迭代法与线性问题迭代法的差别,探讨迭代法及初始值与迭代收敛性的关系。
问题提出:迭代法是求解非线性方程的基本思想方法,与线性方程的情况一样,其构造方法可以有多种多样,但关键是怎样才能使迭代收敛且有较快的收敛速度。
实验内容:考虑一个简单的代数方程 针对上述方程,可以构造多种迭代法,如在实轴上取初始值x 0,请分别用迭代(7.1)-(7.3)作实验,记录各算法的迭代过程。
实验要求:(1)取定某个初始值,分别计算(7.1)-(7.3)迭代结果,它们的收敛性如何?重复选取不同的初始值,反复实验。
请自选设计一种比较形象的记录方式(如利用Matlab的图形功能),分析三种迭代法的收敛性与初值选取的关系。
(2)对三个迭代法中的某个,取不同的初始值进行迭代,结果如何?试分析迭代法对不同的初值是否有差异?(3)线性方程组迭代法的收敛性是不依赖初始值选取的。
比较线性与非线性问题迭代的差异,有何结论和问题。
实验过程:elseifs==3plot(x,y,'linewidth',3)legend('y=x','y=f3')title('x(n+1)=sqrt[x(n)+1]')endholdonplot([ab],[0,0],'k-',[00],[ab],'k-')axis([a,b,a,b])%画坐标轴z=[];fori=1:15%画蛛网图,迭代过程为n=15次xt(1)=x00;yt(1)=y00;%决定始点坐标xt(2)=zxy7f(xt(1),s);%决定终点坐标yt(2)=zxy7f(xt(1),s);zxyplot7(xt,yt,0.6)%画蛛网图ifi<=5pause%按任意键逐次观察前5次迭代的蛛网图endx00=xt(2);y00=yt(2);%将本次迭代的终点作为下次的始点z=[z,xt(1)];%保存迭代点保存为:zxyplot7.m数值实验结果及分析:对于第一个迭代方程x00=1.5x(n+1)=[x(n)]2-1x(n+1)=[x(n)]2-1-1.5-1-0.500.51 1.52 2.5x00=1.2对于第二个迭代方程x00=0.5x(n+1)=1+1/x(n)123456x00=5.0对于第三个迭代方程x00=0.2x(n+1)=sqrt[x(n)+1]x00=0.6x(n+1)=sqrt[x(n)+1]于初值的选取有关。