还剩19页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
前言当今时代,数学知识已经成为科学研究和工程技术领域基础知识,计算问题是数学研究过程中一个重大难题,绝大数的问题都得不到准确的解或者计算量很大,需要借助计算机进行数值求解数值分析就是主要介绍现代科学计算中常用的数值计算方法及其基本原理,研究并解决数值问题的近似解,是数学理论与计算机和实际问题的有机结合数值分析课程需要和计算机紧密结合,各种数学运行软件也是学习数值分析的必备课程软件就是其中一个重要的软件,熟练掌握运用也成为学Matlab Matlab习数值分析的必备技能本文就是针对日常生活中的若干数值分析知识和数学模型问题以及这些相关问题在软件上的运行进行讨论并且为体现出运行的优越性,与最Mat labMat lab后设计了语言相比较同时,本文也在文章末尾总结了对于本次实习过程中所获C得的实验心得为以后的学习研究提供借鉴器舍入误差的影响,消去过程也会出现不稳定得现象,导致结果不正确因此有必要进行列主元技术,以最大可能的消除这种现象这一技术要寻找行使得I魔f1=并将第T行和第4行的元素进行交换,以使得当前的屋”的数值比0要大的多算法
2.
31.消元过程对A=l,2,…,n-1,进行如下步骤1)选主元,记|心|=吟⑷若|心|很小,这说明方程的系数矩阵严重病态,给出警告,提示结果可能不对2)交换增广阵A的-4两行的元素a―%{j=k,…,加1)rj3)计算消元=«..-a a/a(i=k+1,…,n;产4+1,......,加1)ik kjkk
2.回代过程对公小hl,…,1,进行如下计算xk~(氏,〃+-EakjXj/cikk)1j=k1T至此,完成了整个方程组的求解程序
2.4Mat lab的M文件编写:cleara=input C输入系数阵»\n,b二input C输入列阵b\n,n=lengthb;A=[a b]x=zerosn,1;%%%函数主体for k=l:n-l;%%%是否进行主元选取if absAk,k〈yipusilong;%事先给定的认为有必要选主元的小数yzhuyuan=l;else yzhuyuan=O;endif yzhuyuan;%%%%选主元t=A k,k;for r=k+l:n;if absA r,k abstP=r;else p=k;endend%%%交换元素if p=k;〜for q=k:n+l;s二A k,q;Ak,q=A p,q;Ap,q=s;endendend嬲%判断系数矩阵是否奇异或病态非常严重if absAk,kyipusilongdisp矩阵奇异,解可能不正确,end%%%%计算消元,得三角阵for r=k+l:n;m=A r,k/A k,k;for q=k:n+l;A r,q=A r,q—A k,q*m;endendend%%%%求解xxn=An,n+1/An,n;for k=n-l:-1:1;s=0;for r=k+l:n;s=s+A k,r*x r;endt=Ak,n+1-sx k=A k,n+1-s/A k,k end
2.5结果记瓜x为求出的解代入方程后的最大误差,按要求,计算结果如下当£=10-5时,不选主元和选主元的计算结果如下,其中前一列为不选主元结果,后一列为选主元结果,下同
0.
999999347683910.
999999347826512.
000002174219722.
000002173911632.
999997608594512.99999760869721E=
9.301857062382624e-010,0max止匕时,由于,不是很小,机器误差就不是很大,由瓦ax可以看出不选主元的计算结果精度还可以,因此此时可以考虑不选主元以减少计算量当£=17时,不选主元和选主元的计算结果如下
1.
000017846308770.
999999999993481.
999980097208072.
000000000021743.
000006634247312.99999999997609E=
2.036758973744668e-005,0max此时由反“可以看出不选主元的计算精度就不好了,误差开始增大当£=10时,不选主元和选主元的计算结果如下
1.
421085471520201.
000000000000001.
666666666666662.
000000000000003.11111111111111300000000000000E=
0.70770085900503,0max此时由反x可以看出,不选主元的结果应该可以说是不正确了,这是由机器误差引起的当£=10◎时,不选主元和选主元的计算结果如下NaN1NaN2NaN3瓦ax割aN,0不选主元时,程序报错Warning:Divide byzero.这是0因为机器计算的最小精度为107所以此时的“io-就认为是0,故出现了错误现象而选主元时则没有这种现象,而且由瓜,可以看出选主元时的结果应该是精确解
2.6附注采用Gauss消去法时,如果在消元时对角线上的元素始终较大(假如大于IO,,,那么本方法不需要进行列主元计算,计算结果一般就可以达到要求,否则必须进行列主元这一步,以减少机器误差带来的影响,使方法得出的结果正确第三章、矩阵直角三角法的算法及实现问题的提出用直角三角分解求下列线性方程组的解:
2.
1111.__X1+X2+X3=9111-Xi+-x+-x=82315X1+X2+2X=83理论与算法
3.2将方程组Ax二b中的A分解为A=LU,其中L为单位下三角矩阵,U为上三角矩阵,则方程Ax二b化为解两个方程组Ly=b,Ux=y,具体算法如下
①对j=1,2,3,…,n计算ulj=alj对i=2,3,…,n计算
②对k=2,3,•••,n a对j=k,k+1,…,n计算k-l】□kj=a©-:kqUqiq=ib对i=k+l,k+2,•••,n计算hk—I Hjk—2,hqUqk/ukk\q=i对k=2,3,,n计算
③yi=b;k-l yk=bk-W IkqYqq=i对口一计算
④Xn=Yn/Unn,k=nT,2,…,2,1一/Xk=yk UkqXq/Ukk\q=k+l/注由于计算u的公式与计算y的公式形式上一样,故可直接对增广矩阵ran al,n+l[A|b]=.anl an,n+l.施行算法
②和
③,此时U的第n+1列元素即为yo程序
3.3C语言程序如下:#includestdio.hVoid mainFloatx3;Int I;Float a
[3]
[4]={l/4,1/5,1/6,9,1/3,1/4,1/5,8,1/2,1,2;Void DirectLUfloat*,int,float[];DirectLUa
[0],3,x;For i=0;i=3;i++printf^x[%d]=%f\nv,I,x[i];}Void DirectLUfloat*u,int n,float x[]Int I,r,k;forr=0;r=n-l;r++{fori=r;i=n;i++fork=0;k=r-l;k++*u+r*n+1+i-二*u+r*n+1+k**u+k*n+1+i;fori=r+l;i=n-l;i++{fork=0;k=r-l;k++*u+i*n+1+r-二*u+i*n+1+k**u+k*n+1+r;*u+i*n+1+r/二*u+r*n+1+r;}fori=n-l;i=0;i--{for r=n-l;r=i+l;r--*u+i*n+1+n-二*u+i*n+1+r*x[r];X[i]=*u+i*n+l+n/*u+i*n+l+i;}结果
3.4结果为X
[0]=-
227.08X[l]=
476.92X
[2]=-
177.69总结这几个实验是数值分析中几个比较简单的问题,在中实Matlab现起来也是比较简单的对于我们应用的人来说是比较好Matlab的练习项目尽管这几个算法比较简单,但是有些地方还是会出一些小错误,不过经过认真细心的检查程序步骤,这些错误的地方也都能找的出来这对我的其实是我在平常的学习中,在熟练掌握方程组的数学计算原理的同时,还必须对语言有一定的掌握,matlab再根据原理将其写成语言,越是简单的地方越要认真仔细地matlab去做,这样才会写出完整的漂亮的程序通过本次课程设计,我初步掌握了运用,加深了对于MATLAB各种线性插值的理解;也培养了独立工作能力和创造力、综合运用专业及基础知识、解决实际数学问题的能力;在本次课程设计中,在老师的精心指导下,收益匪浅,同时对数学的研究有了更深入的认识摘要数值分析本文数值分析是研究分析用计算机求解数学计算问题的数值计算方法及其理论的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究对象软件是计算机数学经常使用的程序操作软件本文主要Matlab研究以下三个问题在软件中实际操作问题一是二分法和牛顿法的算法及Mat lab实现;二是列主元消去法解方程组;三是用直接三角分解法解方程组通Gauss过以上题目的练习掌握数值分析的相关知识以及软件、语言软件的操作Matlab C【关键词】二分法;牛顿法;消去法;直接三角分解法Gauss参考文献林成森.解线性方程组的直接方法.数值分析.第
[1].2007003307号.14~19林成森.插值法.数值分析.第号」
[2].200700330720~130林成森.数据的最小二乘拟合.数值分析.第号
[3].
2007003307.189周开利.插值和拟合基础及其应用教程.第
[4].Matlab.2007156723号.71~
77.周开利.线性方程组的直接解基础及其应用教程
[5].Matlab.
2007.第号..156723孙志忠,吴宏伟,袁慰平,闻震初.计算方法与实习.南京东南大
[6]学出版社.216-240目录用」
1.
1.
1.
1.
1.
1.
2.
471.
1.
1.
1.1问题的提出
1.
1.12用二分法计算方程sin%-二=0在[1,2]内的根£=5*1士2理论知识
1.
1.2对于二分法,其实质就是说对于给定的待求解的方程fx,其在[a,b]上连续,fafb0,且fx在[a,b]内仅有一个实根X*,取区间中点c,若,则c恰为其根,否则根据fafc〈0是否成立判断根在区间[a,c]和[c,b]中的哪一个,从而得出新区间,仍称为[a,b]重复运行计算,直至满足精度为止这就是二分法的计算思想算法
1.
1.3给定区间山,b],并设fa与fb符号相反,取为根的容许误差,6为|f x|的容许误差
①令c=a+b/2
②如果£或|
②则输出C,结束;否则执行
③;
③如果fafc0,则令b二c,重复
①②③程序
1.
1.4Mat lab的M文件编写clear%%%给定求解区间b=l.5;R=1;k=0;%迭代次数初值while R5e-6;c=a+b/2;if fl2a*fl2c0;a=c;elseb=c;endR=b-a;%求出误差k=k+l;endx二c%给出解运彳丁名吉果
1.
1.5x=
1.40441513061523;fx=-
3.797205105904311e-007;k=18;由fx知结果满足要求,但迭代次数比较多,方法收敛速度比较慢牛顿法的算法及实现
1.2问题的提出
1.
2.1用Newton法求解下列方程%/-1=0x=O.5o理论知识
1.
2.2Newton法通常预先要给出一个猜测初值x,然后根据其迭代公式产生逼近解/的迭代数列{冬},这就是Newton法的思想当X接近三时收敛很快,但是当羽选择不好时,可能会发散,因此初值的选取很重要另外,若将该迭代公式改进为y3/4其中r为要求的方程的根的重数,这就是改进的Newton法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多算法
1.
2.3给定初始值X,£为根的容许误差,n为Ifx|的容许误差,N为迭代次数的容许值
①如果f x=0或迭代次数大于N,则算法失败,结束;否则执行
②②计算玉=%-当斗f%
③若|xi—乂|〈£或|£%|〈n,则输出X1,程序结束;否则执行
④④令Xo=Xi,转向
①程序
1.
2.4Mat lab的M文件编写clear%%%%输入函数f=input请输入需要求解函数〉〉‘,’s嬲%求解fx的导数df=diff f;%%%改进常数或重根数miu=2;%%%初始值xOxO=input Cinput initialvalue x0,;k=0;%迭代次数max=100;%最大迭代次数R二eval subs f,xO,x;%求解f xO,以确定初值xO时否就是解while absRle-8xl=xO-miu*evalsubsf,xO,x/evalsubsdf,xO,xD;R=xl-xO;xO=xl;k=k+l;if evalsubsf,xO,x le-10;break endifk〉max;%如果迭代次数大于给定值,认为迭代不收敛,重新输入初值ss=input,maybe resultis error,choose anew xO,y/n〉〉‘,s;if strcmpss,yxO=input Cinput initialvalue x0>〉;k=0;else breakend endendk;%给出迭代次数x=xO;%给出解结果
1.
2.5x=
0.56714329040978;f x=
2.220446049250313e-016;k=4;由fx知结果满足要求,而且又迭代次数只有4次看出收敛速度很快附注
1.3本实验采用Mat lab的M文件编写其中待求解的方程写成function的方式,如下function y=fx;y=一x*x-sinx;对于二分法,只要能够保证在给定的区间内有根,使能够收敛的,当时收敛的速度和给定的区间有关,二且总体上来说速度比较慢Newton法,收敛速度要比二分法快,但是最终其收敛的结果与初值的选取有关,初值不同,收敛的结果也可能不一样,也就是结果可能不时预期需要得结果第二章、列主元高斯消去法的算法及实现「£26T22求解方程5y=34小数,当571L1032问题的提出
2.1£=10芍,IITH时,分别采用列主元和不列主元的Gauss消去法求解,并比较结果理论知识
2.2由于一般线性方程在使用Gauss消去法求解时,从求解的过程中可以看到,若或小二0,则必须进行行交换,才能使消去过程进行下去有的时候即使但是其绝对值非常小,由于机。
个人认证
优秀文档
获得点赞 0