您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > 计算方法算法的数值稳定性实验报告
专业序号姓名日期实验1算法的数值稳定性实验【实验目的】1.掌握用MATLAB语言的编程训练,初步体验算法的软件实现;2.通过对稳定算法和不稳定算法的结果分析、比较,深入理解算法的数值稳定性及其重要性。【实验内容】1.计算积分dxaxxIn10)(n(n=0,1,2......,10)其中a为参数,分别对a=0.05及a=15按下列两种方案计算,列出其结果,并对其可靠性,说明原因。2.方案一用递推公式naIIn11n(n=1,2,......,10)递推初值可由积分直接得)1(0aaInI3.方案二用递推公式)1(11-nnIaIn(n=N,N-1,......,1)根据估计式11111naInan当1nan或n1111nIna当1nna0取递推初值为11212])1(1111[21NNaaaNaNaI当1aNN或]1111[21NNaIN当1a0NN计算中取N=13开始【解】:手工分析怎样求解这题。【计算机求解】:怎样设计程序?流程图?变量说明?能否将某算法设计成具有形式参数的函数形式?【程序如下】:%myexp1_1.m---算法的数值稳定性实验%见P11实验课题(一)%functiontry_stableglobalnaN=20;%计算N个值a=0.05;%或者a=15%%--------------------------------------------%%[方案I]用递推公式%I(k)=-a*I(k-1)+1/k%I0=log((a+1)/a);%初值I=zeros(N,1);%创建Nx1矩阵(即列向量),元素全为零I(1)=-a*I0+1;fork=2:NI(k)=-a*I(k-1)+1/k;end%%--------------------------------------------%%[方案II]用递推公式%I(k-1)=(-I(k)+1/k)/a%II=zeros(N,1);ifa=N/(N+1)II(N)=(2*a+1)/(2*a*(a+1)*(N+1));elseII(N)=(1/(a+1)/(N+1)+1/N)/2;endfork=N:-1:2II(k-1)=(-II(k)+1/k)/a;end%%--------------------------------------------%%调用matlab高精度数值积分命令quadl计算以便比较III=zeros(N,1);fork=1:Nn=k;III(k)=quadl(@f,0,1);end%%--------------------------------------------%%显示计算结果clcfprintf('\n方案I结果方案II结果精确值')fork=1:N,fprintf('\nI(%2.0f)%17.7f%17.7f%17.7f',k,I(k),II(k),III(k))end%%--------------------------------------------functiony=f(x)%定义函数globalna%参量n为全局变量y=x.^n./(a+x);%★注意:这里一定要'点'运算return%%--------------------------------------------【运行结果如下】:当a=0.05方案I结果方案II结果精确值I(1)0.8477739-919648916620722180000.00000000.8477739I(2)0.457611345982445831036109000.00000000.4576113I(3)0.3104528-2299122291551805700.00000000.3104528I(4)0.2344774114956114577590290.00000000.2344776I(5)0.1882761-5747805728879515.00000000.1882761I(6)0.1572529287390286443975.94000000.1572529I(7)0.1349945-14369514322198.65400000.1349945I(8)0.1182503718475716110.05774000.1182503I(9)0.1051986-35923785805.39177700.1051986I(10)0.09474011796189290.36958890.0947401I(11)0.0861721-89809464.42757040.0861724I(12)0.07902474490473.30471190.0790247I(13)0.0729718-224523.58831250.0729718I(14)0.067780011226.25084420.0677800I(15)0.0632777-561.24587550.0632777I(16)0.059336128.12479380.0593361I(17)0.0558567-1.34741620.0558567I(18)0.05276270.12292640.0527627I(19)0.04999340.04648530.0499934I(20)0.04750030.04767570.0475003当a=15方案I结果方案II结果精确值I(1)0.03192220.03192220.0319222I(2)0.02116730.02116730.0211673I(3)0.01582450.01582450.0158245I(4)0.01263260.01263260.0126326I(5)0.01051120.01051120.0105112I(6)0.00899930.00899930.0089993I(7)0.00786740.00786740.0078674I(8)0.00698830.00698830.0069883I(9)0.00628620.00628590.0062859I(10)0.00570640.00571170.0057117I(11)0.00531360.00523360.0052337I(12)0.00362890.00482930.0048296I(13)0.02248960.00448300.0044838I(14)-0.26591590.00418310.0041831I(15)4.05540500.00392070.0039207I(16)-60.76857560.00368930.0036893I(17)911.58745790.00348370.0034837I(18)-13673.75631290.00330020.0032998I(19)205106.39732480.00312830.0031344I(20)-3076595.90987240.00307540.0029847【结果分析】:1、综上所述,当a=0.05的时候,方案二算法的结果从I(20)开始计算,刚开始的时候与精确解相差不大,但是随着计算的进行,误差变得越来越大,最终与原来的精确解相差十分巨大,而方案一算法的数值结果始终与精确解相差不大,是稳定的算法。2、当a=15的时候,反而是方案二的算法的数值结果与精确解更为接近,方案一算法的结果随着算法运算的进行,与精确解相差变大了。3、以上的实验说明了我们在进行数值分析时一定要选择合适的算法,而不能盲目的选择单一的算法,因为随着数值的变化,可能稳定的算法也会出现很大的误差。所以我们要根据实际问题来确定合适的算法,才能尽可能的减小误差。
本文标题:计算方法算法的数值稳定性实验报告
链接地址:https://www.777doc.com/doc-4028765 .html