成都大学数值计算课程设计.doc_第1页
成都大学数值计算课程设计.doc_第2页
成都大学数值计算课程设计.doc_第3页
成都大学数值计算课程设计.doc_第4页
成都大学数值计算课程设计.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

四川理工学院数值计算方法课程设计 题目: 课程设计 专业: 信 计 班级: 2012级2班 姓名: 何 鑫 学号: 12071030205 目录设计题一:31.1问题分析及设计思路:31.2程序清单:31.3运行结果:41.4结果分析与设计总结:4设计题二:42.1问题分析及设计思路:52.2程序清单:52.3程序结果:52.4结果分析与设计总结:6设计题三:73.1问题分析及设计思路:73.2程序清单:73.3程序结果:83.4结果分析与设计总结:9设计题四:94.1问题分析及设计思路:94.2程序清单:104.3程序结果:104.4结果分析与设计总结:11数值分析课程设计总结:12 设计题一:用复合梯形公式计算下面积分,取n=2,4,8,25,100:I= 并给出数值积分结果与精确值1之间的的误差.1.1问题分析及设计思路:复合梯形公式定理:将积分区间a,b分n等分,其中记分点xk=a+(k-1h, (k=1,2,n),其中 h=(b-a)/n,然后用f(x)在每个小区间上应用梯形公式即可。因此,在此题中将0,进行n等分,然后应用梯形公式依次计算每个分区间的积分,最后相加即为所计算的数值积分的结果,然后比较与精确值1之间的误差即可。程序设计思路:首先要在程序中编辑出精确值及积分的区间以便后边比较误差和等分区间,接着编写等分区间的程序与被积积分以及计算数值积分结果和精确值与计算结果差值(即为误差)的表示程序,先通过循环可依次计算n=2,4,8的结果,在分别单独计算n=25,100的结果,分别比较误差。1.2程序清单:Inxact=1;a=0; b=pi/2;fprintf(n 精确值Inxact=1n);fprintf(n n I Errorn);n=1;for k=1:3 n=2*n; h=(b-a)/n;i=1:n+1; x=a+(i-1)*h;f=sin(x); I=h*(sum(f)-(f(1)+f(length(f)/2); fprintf( %3.0f %12.9f %12.9fn, n, I, Inxact -I);end n=n+17; h=(b-a)/n;i=1:n+1; x=a+(i-1)*h;f=sin(x); I=h*(sum(f)-(f(1)+f(length(f)/2); fprintf( %3.0f %12.9f %12.9fn, n, I, Inxact -I); n=n*4; h=(b-a)/n;i=1:n+1; x=a+(i-1)*h;f=sin(x); I=h*(sum(f)-(f(1)+f(length(f)/2);fprintf( %3.0f %12.9f %12.9fn, n, I, Inxact -I);1.3运行结果: 精确值Inxact=1 n I Error 2 0.948059449 0.051940551 4 0.987115801 0.012884199 8 0.996785172 0.003214828 25 0.999670992 0.000329008 100 0.999979438 0.0000205621.4结果分析与设计总结:分析:由程序的运行结果易得,当n的取值越小时,所得到的结果与精确值之间的误差越大,而当当n的取值越大时,所得到的结果与精确值之间的误差越小。由此可以得出,当区间等分越多,步长h的值越小,每个小区间计算的结果越精确,由此所计算出的结果误差越小。总结:在程序设计中,需要对定理有充分理解,灵活运用,将定理转换成matlab所能读取的程序;在编辑程序的过程中,要仔细,注意所保留的计算结果的有效数字,如果保留的有效数字位数比较少,有可能使得当n不同时所计算的结果相同,误差相同,不便于对结果进行分析。由结果得复合梯形公式有一定的局限性:若n比较小,误差比较大,但比较好计算,若n取很大值时,结果误差很小,但计算量比较大。设计题二:用不动点迭代格式求解方程 x- x=2(x1)要求相对误差限=。2.1问题分析及设计思路:不动点迭代:一般非线性方程组可以写成F(x)=0的形式,其F:是定义在区域D上的向量函数。把方程组F(x)=0改写成与之等价的形式:x=G(x)。因此,求方程组F(x)=0的解就转化为求函数的G(x)的不动点。由求解方程x- x=2可得所转换成的等价形式x=G(x)即迭代格式为=2+ln,(k=0,1,2)且方程的定义域为x1,所以可以对于给定的初始点赋值为=1,以便计算。程序的设计思路:首先对于相对误差限的限制,要使得程序的结果小于误差限时才可以迭代停止,可以做出随着迭代的进行所得结果的值的变化图像,以便观察分析。编辑程序的结果输出是要保留足够多的有效小数,以便于实际误差与误差限的对比,再者就是迭代格式转换成程序的语言。2.2程序清单:eps=9e-9;dx=1;x0=1;k=0;fprintf(It.no=%2d x%2d=%10.9fn,k,k,x0)plot(k,x0,r*)hold onwhile(dxeps) k=k+1; x=2+log(x0); dx=abs(x-x0)/(1+abs(x);%abs求绝对值 plot(k,x,r*) fprintf(It.no=%2d x%2d=%10.9fn,k,k,x) x0=x;endfprintf(n迭代次数k=%2d,k)2.3程序结果:It.no= 0 x 0=1.000000000It.no= 1 x 1=2.000000000It.no= 2 x 2=2.693147181It.no= 3 x 3=2.990710465It.no= 4 x 4=3.095510973It.no= 5 x 5=3.129952989It.no= 6 x 6=3.141017985It.no= 7 x 7=3.144546946It.no= 8 x 8=3.145669825It.no= 9 x 9=3.146026848It.no=10 x10=3.146140339It.no=11 x11=3.146176412It.no=12 x12=3.146187878It.no=13 x13=3.146191523It.no=14 x14=3.146192681It.no=15 x15=3.146193049It.no=16 x16=3.146193166It.no=17 x17=3.146193203随着迭代的进行所得结果的变化趋势:2.4结果分析与设计总结:由图像可以明显得出,随着迭代的进行,所计算的结果逐渐增大,且增大去趋势越来愈小,并逐渐趋近与一个数,这个数就是方程的精确解。即=x*,显然,迭代的次数越多,误差越来越小。总结,在此程序的编辑中容易出现几个错误:1、很多人容易将lnx在程序中也就这样直接写lnx,实际上在matlab中lnx要编写出log(x)才能被识别。2、在保留有效小数的个数时,很容易按习惯保留5位或者6位,但此题中明确要求误差限为=,所以必须保留9位有效小数,不然的话我们就会观察到最后几次的迭代结果相同,其实不是这样,只是保留的小数少了,显示的结果不完整。3、就是初始值的选定,本题明确有x1,所以必定不能选x1的数,再者不能选太大的数,容易导致迭代次数增加,计算量增大。4、有的人易将方程的迭代格式计算错误,那样必定得不出正确的结果。因此,在编写程序的过程中药掌握好每个细节,有时候一个小细节会产生致命的错误,而且在有的方程中如果取初始值不妥当,迭代法会发散的,那样所做的只会是无用功。设计题三:试用SOR(超松弛)迭代法求解下列方程组: 取w=1.25,=,要求编制矩阵迭代求解的函数文件,并给出结果。3.1问题分析及设计思路:超松弛迭代法实质上是Gauss-Seidel的一种加速方法,采用加权平均而得到的新算法。首先有题目可得初始向量=,松弛因子w=1.25,,由此可以计算与的关系,然后根据方程的参数代入迭代即可,直至误差小于容许误差即可停止迭代,输出。程序的设计思路:首先,将方程组的系数值和y值转换成matlab程序编辑出来,创建初始向量x=ones(3,1)和松弛因子,编写循环程序分别计算(i=1,2,3)的值,将迭代格式转换成matlab语言,编写每一次迭代过后的误差error改变的程序,通过编写error与容许误差大小比较的程序来控制迭代是否继续进行(即程序是否结束)。3.2程序清单:a(1,1)=4;a(1,2)=3;a(1,3)=0;a(2,1)=a(1,2);a(2,2)=a(1,1);a(2,3)=-1;a(3,1)=a(1,3);a(3,2)=a(2,3);a(3,3)=a(1,1);y(1)=24;y(2)=30;y(3)=-24;x=ones(3,1);w=1.25;for it=1:20 error=0; for i=1:3 s=0;xb=x(i); for j=1:3 if i=j,s=s+a(i,j)*x(j);end end x(i)=w*(y(i)-s)/a(i ,i)+(1-w)*x(i); error=error+abs(x(i)-xb);endfprintf(it.no.=%3.0f,error=%7.2en,it,error)if error0.000001,break;end endx3.3程序结果:it.no.= 1, error=1.50e+001it.no.= 2, error=5.24e+000it.no.= 3, error=7.39e-001it.no.= 4, error=2.03e-001it.no.= 5, error=2.87e-002it.no.= 6, error=1.16e-002it.no.= 7, error=1.38e-003it.no.= 8, error=1.06e-003it.no.= 9, error=2.67e-004it.no.= 10, error=1.38e-004it.no.= 11, error=4.89e-005it.no.= 12, error=2.08e-005it.no.= 13, error=8.07e-006it.no.= 14, error=3.28e-006it.no.= 15, error=1.30e-006it.no.= 16, error=5.23e-007x = 3.0000 4.0000 -5.00003.4结果分析与设计总结:通过程序的结果可以看出,随着迭代次数的增多,所产生的误差在逐渐减小,直至满足于容许误差的关系迭代停止,因此我们可以通过更改容许误差的大小来控制迭代的次数,显然越小,我们所计算出的方程的解越精确,而且在程序的运行过程中,容易发现松弛因数的改变会影响每次迭代的误差甚至结果。总结,在编辑程序的过程中,许多人可能会忽视松弛因子w与初始向量,容易漏写松弛因子w及错写初始向量x=zeros(1,3),这或许不会影响最终的计算结果,但每次迭代的误差会有所不同,迭代次数也会发生改变,而且在编写迭代次数的限制是不能过小,否则会影响迭代的进行,使结果不够精确。因此在编写程序的过程中,我们要仔细阅读题目要求编写程序,注意程序中的细节,减少人为误差。设计题四: 用Jacobi迭代法与Gauss-seidel迭代法解下列方程组,并对两种迭代法进行比较: =.取=。4.1问题分析及设计思路:Jacobi的过程是首先将方程组中的系数矩阵A分解成三部分,即:A = L+D+U,其中D为对角阵,L为下三角矩阵,U为上三角矩阵,r然后确定迭代格式,X(k+1) = B* +f ,其中B称为迭代矩阵, 再选取初始迭代向量,开始逐次迭代。Gauss-seidel迭代与Jacobi类似,不过迭代矩阵的选取不同,使得两种迭代是功能变化。了解两种迭代方法的迭代格式,通过方程组可以表示出迭代格式。程序设计思路:通过分量形式进行迭代,首先必须用程序表示出初始向量,控制迭代次数,通过两种迭代的不同迭代格式用方程组的系数和y值表示出了并转换成matlab可以识别的程序语言,求出结果。Jacobi迭代4.2程序清单:fprintf(Jacobi迭代)x1_(1)=0;x2_(1)=0;x3_(1)=0;for i=1:10x1_(i+1)=-0.5*x2_(i)-0.5*x3_(i);x2_(i+1)=0.5-0.5*x1_(i)-0.5*x3_(i);x3_(i+1)=-2.5-0.5*x1_(i)-0.5*x2_(i);endx=x1_,x2_,x3_Jacobi迭代4.3程序结果:Jacobi迭代x = 0 0 0 0 0.5000 -2.5000 1.0000 1.7500 -2.7500 0.5000 1.3750 -3.8750 1.2500 2.1875 -3.4375 0.6250 1.5938 -4.2188 1.3125 2.2969 -3.6094 0.6563 1.6484 -4.3047 1.3281 2.3242 -3.6523 0.6641 1.6621 -4.3262 1.3320 2.3311 -3.6631 Gauss-Seidel迭代程序清单fprintf(Gauss-Seide迭代)x1_(1)=0;x2_(1)=0;x3_(1)=0;for i=1:15x1_(i+1)=-0.5*x2_(i)-0.5*x3_(i);x2_(i+1)=0.5-0.5*x1_(i+1)-0.5*x3_(i);x3_(i+1)=-2.5-0.5*x1_(i+1)-0.5*x2_(i+1);endx=x1_,x2_,x3_程序结果:Gauss-Seidel迭代x = 0 0 0 0 0.5000 -2.7500 1.1250 1.3125 -3.7188 1.2031 1.7578 -3.9805 1.1113 1.9346 -4.0229 1.0442 1.9894 -4.0168 1.0137 2.0015 -4.00

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论