成都大学数值计算课程设计.docx

上传人:太** 文档编号:86381742 上传时间:2023-04-14 格式:DOCX 页数:12 大小:52.82KB
返回 下载 相关 举报
成都大学数值计算课程设计.docx_第1页
第1页 / 共12页
成都大学数值计算课程设计.docx_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《成都大学数值计算课程设计.docx》由会员分享,可在线阅读,更多相关《成都大学数值计算课程设计.docx(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、四川理工学院数值计算方法课程设计题目:题目:课程设计专业:信计班级: 2012级2班姓名:何鑫学号:成matlab可以识别的程序语言,求出结果。Jacobi迭代4.2程序清单:fprintf ( Jacobi 迭代)xl_(l)=0;x2 (1)=0;x3_(l)=0;for i=l:10xl_(i+l)=-0. 5*x2_(i)-0. 5*x3_(i);x2_(i+l)=0. 5-0. 5*xl_(i)-0. 5*x3_(i);x3_(i+l)=-2. 5-0. 5*xl_(i)-0. 5*x2_(i); endx=xl_,, x2_,, x3j Jacobi迭代4.3 程序结果:Jacob

2、i迭代 x =0 -2. 5000 -2. 7500 -3. 8750 -3. 4375 -4.2188 -3. 6094 -4. 3047 -3. 6523 -4. 3262 -3. 6631001.0000 0. 5000 1.2500 0. 6250 1.3125 0. 6563 1.3281 0. 6641 1.33200 0. 5000 1. 7500 1. 3750 2. 1875 1. 5938 2. 2969 1. 6484 2. 3242 1.6621 2. 3311Gauss-Seidel 迭代 程序清单fprintf C Gauss-Seide 迭代) xl_(l)=0;

3、x2 (1)=0;x3_ = 0;for i=l:15xl_(i+l)=-0. 5*x2_(i)-0. 5*x3_(i);x2_(i+l)=0. 5-0. 5*xl_(i+l)-0. 5*x3_(i);x3_(i+l)=-2. 5-0. 5*xl_(i+l)-0. 5*x2_(i+l); endx=xl_J, x2_,, x3_J 程序结果:Gauss-Seidel 迭代0 01. 1250 1.20311. 1113 1.0442 1.0137 1.0030 1.0002 0. 9997 0. 9998 0. 9999 1.0000 1.0000 1.0000 1.00000 01. 125

4、0 1.20311. 1113 1.0442 1.0137 1.0030 1.0002 0. 9997 0. 9998 0. 9999 1.0000 1.0000 1.0000 1.00000 0. 5000 1. 3125 1, 7578 1.9346 1. 9894 2. 0015 2. 0023 2. 0012 2. 0005 2. 0002 2. 0000 2. 0000 2. 0000 2. 0000 2. 00000-2. 7500-3. 7188-3. 9805-4. 0229-4. 0168-4.0076-4. 0027-4.0007-4.0001-4. 0000-4. 000

5、0-4. 0000-4. 0000-4. 0000-4. 0000结果分析与设计总结:有两种迭代法的结果可以明显看出:Jacobi迭代法的迭代结果明显不收 敛,因为计算可得B的谱半径大于1,无法算出结果。相反,Gauss-Seidel迭代 法结果可以明显看出,在迭代到11步,结果已经收敛到精确解,B的谱半径小 于1.得出雅可比迭代法可以解出方程组的精确解为(1,2, -4),而高斯-赛德 尔迭代法不能算出解,且迭代解出现发散。总结:在计算表达两种迭代格式时, 切记不可以弄混淆,不然程序所计算出来的结果必定会发生改变,对两种迭代方 法的比照产生影响。通过本实验的学习,掌握了 Jacobi迭代法和

6、G-S迭代法的 基本思想和原理,可以了解它们各自的优缺点及适用范围。我们可以发现并不是 所有的方程都可以用Jacobi和Gauss-Seidel迭代解的。数值分析课程设计总结:通过课程设计,对数值分析教材中的知识有了更深层次的理解,能够更加 熟练的运用所学到的知识,对matlab这个软件的操作也更加熟练,对其功能了 解的更加透彻了,不仅丰富了知识,更增加了自己的动手能力。目录设计题一:3L1问题分析及设计思路:31.2 程序清单:31.3 运行结果:41.4 结果分析与设计总结:4设计题二:42.1 问题分析及设计思路:52.2 程序清单:52.3 程序结果:52.4 结果分析与设计总结:6设

7、计题三:73.1 问题分析及设计思路:73.2 程序清单: 83.3 程序结果:83.4 结果分析与设计总结:9设计题四:94.1 问题分析及设计思路:94.2 程序清单:104.3 程序结果:104.4 结果分析与设计总结:11数值分析课程设计总结:12设计题一:用复合梯形公式计算下面积分,取n=2, 4, 8, 25,100:I=C,2 sinxdx并给出数值积分结果与精确值1之间的的误差.1.1 问题分析及设计思路:复合梯形公式定理:将积分区间a, b分n等分,其中记分点xk=a+(k-lh, (k=l,2,n),其中h=(b-a)/n,然后用f(x)在每个小区间上应用梯形公式即可。因此

8、,在此题中将0,万/2进行n等分,然后应用梯形公式依次计算每个分区间的积分,最后相加即为所计算的数值积分的结果,然后比拟与精确值1之间 的误差即可。程序设计思路:首先要在程序中编辑出精确值及积分的区间以便后 边比拟误差和等分区间,接着编写等分区间的程序与被积积分以及计算数值积分 结果和精确值与计算结果差值(即为误差)的表示程序,先通过循环可依次计算 n=2,4,8的结果,在分别单独计算n=25, 100的结果,分别比拟误差。1.2 程序清单:Inxact=l;a=0; b=pi/2;fprintf ( n 精确值 Inxact=ln,);fprintf C n n IErrorn?);n=l;

9、for k=l:3n=2*n;h=(b-a)/n;i=l:n+l;x=a+(i-l)*h;f=sin (x);I=h*(sum(f)-(f +f (length (f) )/2);fprintf C %3. Of %12.9f %12.9fn ,n,I,Inxact -I);endn=n+17;h= (b-a)/n;i=l:n+l;x=a+(i-l)*h;f=sin(x);I=h*(sum(f)-(f (l)+f (length(f)/2);fprintf (%3. Of %12.9f%12.9fn,n,I,Inxact -I);n=n*4;h=(b-a) /n;i=l:n+l;x=a+ (i

10、-l)*h;f=sin(x);I二h*(sum(f)-(f (l)+f (length(f)/2);fprintf C %3. Of %12.9f %12.9fn ,n,I,Inxact -I);运行结果:精确值Inxact=lError0.0519405510.0128841990.0032148280.0003290080.000020562Error0.0519405510.0128841990.0032148280.0003290080.000020562nI20.94805944940.98711580180.996785172250.9996709921000.999979438结

11、果分析与设计总结:分析:由程序的运行结果易得,当n的取值越小时,所得到的结果与精确值 之间的误差越大,而当当n的取值越大时,所得到的结果与精确值之间的误差越 小。由此可以得出,当区间等分越多,步长h的值越小,每个小区间计算的结果 越精确,由此所计算出的结果误差越小。总结:在程序设计中,需要对定理有充 分理解,灵活运用,将定理转换成matlab所能读取的程序;在编辑程序的过程 中,要仔细,注意所保存的计算结果的有效数字,如果保存的有效数字位数比拟 少,有可能使得当n不同时所计算的结果相同,误差相同,不便于对结果进行分 析。由结果得复合梯形公式有一定的局限性:假设n比拟小,误差比拟大,但比拟 好计

12、算,假设n取很大值时,结果误差很小,但计算量比拟大。设计题二:用不动点迭代格式求解方程x- lnx=2(xl)要求相对误差限10一8。2.1 问题分析及设计思路:不动点迭代:一般非线性方程组可以写成F(X)=0的形式,其尸:RnfRn是定义在区域DuRn上的向量函数。把方程组F(X)=0改写成与之等价的形式:X=G(x) o因此,求方程组F (x) =0的解就转化为求函数的G (x)的不动点。由 求解方程x- lnx=2可得所转换成的等价形式x=G(x)即迭代格式为xk+1=2+lnxk, (k=0, 1,2)且方程的定义域为xl,所以可以对于给定的初始点X。赋值为x0=l,以便计算。程序的设

13、计思路:首先对于相对误差限的限制,要使 得程序的结果小于误差限时才可以迭代停止,可以做出随着迭代的进行所得结果 的值的变化图像,以便观察分析。编辑程序的结果输出是要保存足够多的有效小 数,以便于实际误差与误差限的比照,再者就是迭代格式转换成程序的语言。2.2 程序清单:eps=9e-9;dx=l;x0=l;k=0;fprintf ( It. no=%2d x %2d=%10. 9fn,, k, k, xO) plot (k, xO, r*) hold on while(dxeps)k=k+l;x=2+log(x0);dx=abs (x-x0) / (1+abs (x) ;%abs 求绝对值 p

14、lot (k, x, r*)fprintf (J It. no=%2dx %2d=%10. 9fn,, k, k, x)x0=x;end fprintf ( n 迭代次数 k=%2d,, k)2.3 程序结果:It.no= 0x0=1.000000000It. no= 1x1=2. 000000000It. no= 2x2=2.693147181It. no= 3x3=2.990710465It. no= 4x4=3. 095510973It.no= 5x5 =3. 129952989It.no= 6x6=3. 141017985It. no= 7 It. no= 8 It. no= 9 It

15、. no=10 It. no=ll It. no=12 It. no=13 It. no=14 It. no=15 It. no=16It. no=17It. no= 7 It. no= 8 It. no= 9 It. no=10 It. no=ll It. no=12 It. no=13 It. no=14 It. no=15 It. no=16It. no=17x 7=3. 144546946 x 8=3. 145669825 x 9=3. 146026848 x10=3. 146140339 xll=3. 146176412 x12=3. 146187878 x13=3. 1461915

16、23 x14=3. 146192681 x15=3. 146193049 x16=3. 146193166 x17=3. 146193203随着迭代的进行所得结果的变化趋势:2.4 结果分析与设计总结:由图像可以明显得出,随着迭代的进行,所计算的结果逐渐增大,且增大去 趋势越来愈小,并逐渐趋近与一个数,这个数就是方程的精确解。即limj8Xk=x*,显然,迭代的次数越多,误差越来越小。总结,在此程序的编辑 中容易出现几个错误:1、很多人容易将Inx在程序中也就这样直接写Inx,实际 上在mat lab中Inx要编写出log (x)才能被识别。2、在保存有效小数的个数时,很容易按习惯保存5位或者

17、6位,但此题中明确要求误差限为钎10一8,所以必须 保存9位有效小数,不然的话我们就会观察到最后几次的迭代结果相同,其实不 是这样,只是保存的小数少了,显示的结果不完整。3、就是初始值的选定,本 题明确有xl,所以必定不能选xl的数,再者不能选太大的数,容易导致迭代 次数增加,计算量增大。4、有的人易将方程的迭代格式计算错误,那样必定得 不出正确的结果。因此,在编写程序的过程中药掌握好每个细节,有时候一个小 细节会产生致命的错误,而且在有的方程中如果取初始值不妥当,迭代法会发散 的,那样所做的只会是无用功。设计题三:试用SOR (超松弛)迭代法求解以下方程组:4X1 + 3x2= 243X1

18、+ 4x2 x3 = 30x2 + 4x3 = 24取w=1.25,X()= (1, 1, 1) T,要求编制矩阵迭代求解的函数文件,并 给出结果。3.1问题分析及设计思路:超松弛迭代法实质上是Gauss-Seidel的一种加速方法,采用加权平均而得到的新算法。首先有题目可得初始向量x(。)= (1,1,1) ,松弛因子w=L25,由此可以计算xjk+u与的关系,然后根据方程的参数代入迭代即可,直至误差小于容许误差即可停止迭代,输出X(k+D。程序的设计思路:首先,将方 程组的系数值和y值转换成matlab程序编辑出来,创立初始向量x=ones1) 和松弛因子,编写循环程序分别计算为(i=l,

19、 2, 3)的值,将迭代格式转换成 matlab语言,编写每一次迭代过后的误差error改变的程序,通过编写error与容许误差大小比拟的程序来控制迭代是否继续进行(即程序是否结束)。3.2程序清单:a(l, l)=4;a(l, 2)=3;a(l, 3)=0;a(2, l)=a(l,2) ;a(2,2)=a(l, 1) ;a(2, 3)=-l;a(3, l)=a(l, 3) ;a(3, 2)=a(2, 3) ;a(3, 3)=a(l, 1);y (1)=24 ;y (2)= 30; y (3) =-24;x=ones (3, 1);w=l. 25;for it=l:20error=0;for

20、i=l:3s=0;xb=x(i);for j=l:3if i=j, s=s+a(i, j)*x(j) ;end endx(i)=w*(y(i)-s)/a(i , i) + (l-w)*x(i);error=error+abs(x(i)-xb);endfprintf ( it. no. =%3. Of, error=%7. 2en,, it, error) if error0. 000001, break;end endx3.3程序结果:it. no.=1,error=l.50e+001it. no.=2,error=5. 24e+000it. no.=3,error=7. 39e-001it.

21、 no.=4,error=2. 03e-001it. no.=5,error=2. 87e-002it. no.=6,error=l. 16e-002it. no.=7,error=l. 38e-003it. no.=8,error-1. 06e-003it. no.=9,error=2. 67e-004it. no.=10,error=l. 38e-004it. no.=H,error=4. 89e-005it. no.=12,error=2. 08e-005it. no.=13,error=8. 07e-006it. no.=14,error=3. 28e-006it. no.=15,er

22、ror=l. 30e-006it. no.=16,error=5. 23e-007X3. 00004. 0000-5. 00003.4结果分析与设计总结:通过程序的结果可以看出,随着迭代次数的增多,所产生的误差在逐渐减小, 直至满足于容许误差的关系迭代停止,因此我们可以通过更改容许误差的大小 来控制迭代的次数,显然越小,我们所计算出的方程的解越精确,而且在程序 的运行过程中,容易发现松弛因数的改变会影响每次迭代的误差甚至结果。总结, 在编辑程序的过程中,许多人可能会忽视松弛因子W与初始向量,容易漏写松弛 因子W及错写初始向量X二zeros(1,3),这或许不会影响最终的计算结果,但每 次迭代的

23、误差会有所不同,迭代次数也会发生改变,而且在编写迭代次数的限制 是不能过小,否那么会影响迭代的进行,使结果不够精确。因此在编写程序的过程 中,我们要仔细阅读题目要求编写程序,注意程序中的细节,减少人为误差。设计题四:用Jacobi迭代法与Gauss-seidel迭代法解以下方程组,并对两种迭代法进行比拟: 10.5O.51X1 r o0.510.50.5.0.5 0.5 1 Jlx3 1-2.5.取x()=(0, 0, 0)To4.1问题分析及设计思路:Jacobi的过程是首先将方程组中的系数矩阵A分解成三局部,即:A = L+D+U, 其中D为对角阵,L为下三角矩阵,U为上三角矩阵,r然后确定迭代格式,XXk+1)= B*x(k)+f ,其中B称为迭代矩阵,再选取初始迭代向量x(),开始逐次迭代。Gauss-seidel迭代与Jacobi类似,不过迭代矩阵的选取不同,使得两种迭代 是功能变化。了解两种迭代方法的迭代格式,通过方程组可以表示出迭代格式。 程序设计思路:通过分量形式进行迭代,首先必须用程序表示出初始向量,控制 迭代次数,通过两种迭代的不同迭代格式用方程组的系数和y值表示出了并转换

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁