数值分析课程设计_第1页
数值分析课程设计_第2页
数值分析课程设计_第3页
数值分析课程设计_第4页
数值分析课程设计_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

数值分析课程设计报告4681112姓 名 学 号 院 系 数学与信息科学学院专 业信息与计算科学年级 级 指导教师 TOC\o"1-5"\h\z设计题四 1龙格现象实验 1问题分析与设计思路 1在计算方法中,有利用多项式对某一函数的近似逼近,这样,利用多项式就可以计算相应的函数值。例如,在事先不知道某一函数的具体形式的情况下,只能测量得知某一些分散的函数值。例如我们不知道气温随日期变化的具体函数关系,但是我们可以测量一些孤立的日期的气温值,并假定此气温随日期变化的函数满足某一多项式。这样,利用已经测的数据,应用待定系数法便可以求得一个多项式函数。应用此函数就可以计算或者说预测其他日期的气温值。一般情况下,多项式的次数越多,需要的数据就越多,而TOC\o"1-5"\h\z预测也就越准确,这就是龙格现象。 1程序清单 1(1)编写拉格朗日插值函数,将其存到当前路径的M文件中: 1functiony=lagrange(x0,y0,x) 1n=length(x0);m=length(x); 1fori=1:m 1z=x(i); 1L=0.0; 1forj=1:n 1T=1.0; 1fork=1:n 1ifk~=j 1T=T*(z-x0(k))/(x0(j)-x0(k)); 1end 1end 1L=T*y0(j)+L; 1end 1y(i)=L; 1end 2(2)分别取不同的n值,作出相对应n值的插值多项式的曲线图。 2gn=4时, 2x0=-5:10/4:5; 2y0=1./(1+x0.A2); 2x=-5:0.1:5; 2y=lagrange(x0,y0,x); 2y1=1./(1+x.A2); 2plot(x,y,'-k') 2holdon 2plot(x,y,'-.r') 2£n=6时, 2x0=-5:10/6:5; 2y0=1./(1+x0.A2); 2x=-5:0.1:5; 2y=lagrange(x0,y0,x); 2>y1=1./(1+x.A2); 2>plot(x,y1,'-k') 2>holdon 2>plot(x,y,'--h') 2£n=8时, 2x0=-5:10/8:5; 2y0=1./(1+x0.A2); 2x=-5:0.1:5; 2y=lagrange(x0,y0,x); 2y1=1./(1+x.A2); 2plot(x,y1,'-k') 2holdon 2plot(x,y,'--g') 2£n=10时, 2x0=-5:1:5; 2y0=1./(1+x0.A2); 2x=-5:0.1:5; 2y=lagrange(x0,y0,x); 3y1=1./(1+x.A2); 3plot(x,y1,'-k') 3holdon 3plot(x,y,'--m') 3结果分析 3设计总结 3\o"CurrentDocument"数值分析课程设计总结 22#i3i3fork=2:max1P(k)=feval('f1021',P(k-1));k,err=abs(P(k)-P(k-1))p=P(k);if(err<tol),break;endifk==maxidisp('maximumnumberofiterationsexceeded');endendP=P;定义一个名为f1021.m的函数文件functiony=f1021(x)y=sin(x)/x;割线法:求方程x3-x+2=0的一个近似解,给定初值-1.5,-1.52,误差不超过10-6。function[pi,err,k,y]=secant(f1042,p0,pi,delta,maxi)p0,pi,feval('f1042',p0),feval('fi042',pi),k=0;fork=i:maxip2=pi-feval('fi042',pi)*(pi-p0)/(feval('fi042',pi)-feval('fi042',p0));err=abs(p2-pi);p0=pi;pi=p2;pi,err,k,y=feval('fi042',pi);if(err<delta)I(y==0),break,endend先定义一个名为fi042.m的函数文件functiony=fi042(x)y=xA3-x+2;建立一个主程序progi042.mclcclearsecant('fi042',-i.5,-i.52,i0A(-6),ii)牛顿法:求解方程x3-3x+2=0的一个近似解,给定初值为1.2,误差不超过10-6。function[p1,err,k,y]=newton(f1041,df1041,p0,delta,max1)p0,feval('f1041',p0)fork=1:max1p1=p0-feval('f1041',p0)/feval('df1041',p0);err=abs(p1-p0);p0=p1;p1,err,k,y=feval('f1041',p1)if(err<delta)|(y==0),break,endp1,err,k,y=feval('f1041',p1)end先用m文件定义两个名为f1014.m和df1041.m的函数文件functiony=f1041(x)y=xA4-4*x+2;functiony=df1041(x)y=4*xA3-4;建立一个主程序prog1041.mclearnewton('f1041',‘df1041’,1.2,10A(-6),18)二分法:functioner_fen(f,a,b,esp);f1=subs(f,a);f2=subs(f,b);iff1*f2>0disp('该方程在【a,b】上无解’);elseiff1==0root=a;elseiff2==0root=b;elsea0=a;b0=b;A=[];whileabs((b0-a0)/2)>=esphalf=(a0+b0)/2;fa=subs(f,a0);fb=subs(f,b0);fhalf=subs(f,half);iffhalf==0root=half;break;elseiffa*fhalf<0b0=half;elsea0=half;endA=[A,half];endroot=(b0+a0)/2;endrootA4.3结果分析迭代法:在命令窗口输入:clcclearallfixpt('f1021’,0.5,10N-5),20)运行结果如下:k=2err=0.4589k=3err=0.1052k=4err=0.0292k=5err=0.0078k=6err=0.0021k=7err=5.7408e-004k=8err=1.5525e-004k=9err=4.1975e-005k=10err=1.1350e-005k=11err=3.0688e-006ans=0.8767割线法:在命令窗口输入:clcclearsecant('f1042',-1.5,-1.52,10N-6),11)运行结果如下:牛顿法:在命令窗口输入:clearnewton('f1041','df1041',1.2,10八(-6),18)运行结果如下:p0=1.2000ans=-0.7264p1=1.4495err=0.2495k=1y=0.6160pl=1.4495err=0.2495k=1y=0.6160p1=1.3741err=0.0753k=2y=0.0690p1=1.3741err=0.0753k=2y=0.0690p1=1.3633err=0.0108k=3y=0.0013p1=1.3633err=0.0108k=3y=0.0013p1=1.3631err=2.1510e-004k=4y=5.1591e-007p1=1.3631err=2.1510e-004k=4y=5.1591e-007p1=1.3631err=8.4146e-008k=5y=7.9048e-014ans=1.3631二分法:在命令窗口输入:symsx;er_fen(sin(x),-2,1,1.0e-2)运行结果如下:4.4设计总结求解非线性方程的问题有以下几种基本方法。二分法简单易行,但收敛较慢,仅有线性收敛速度。而且该方法不能用于求偶数重根或复根,但可以用来确定迭代法的初始值。牛顿法是方程求根中常用的一种迭代方法,它除了具有简单迭代法的优点外,还具有二阶收敛速度(在单根邻近处)的特点,但牛顿法对初始值选取比较苛刻(必须充分靠近方程的根)否则牛顿法可能不收敛。根据二分法求解非线性方程根的原理,将所求方程根所在的区间平分为两个小区间,在判断根属于哪个小区间;把有根的小区间再平分为二,再判断根所在的更小的区间对分;重复这一过程,最后求出所要的近似值。当所分的小区间的间距越小的时候,得出的方程根结果就越精确,其原因就是所分的小区间间距越小,则就越接近方程等于0的根。所以最后的结果的精度越高,得到的误差越小;而对于简单迭代法,只有在满足一定条件的情况下,才能求解出在区间上有唯一根使迭代序列收敛于。根据牛顿迭代法的原理,求解出非线性方程根的结果可以看出,牛顿迭代法具有平方收敛的速度,所以在迭代过程中只要迭代几次就会得到比较精确的解,并不像简单迭代法,需要迭代多次才能解出较为精确的结果,但是用牛顿迭代法求解时选定的初值要接近方程的解,否则可能得不到收敛的结果。同时,牛顿迭代法计算量也会相对较大些。割线法,用选定的两个初值点所对应的函数值连接作弦,用此弦与轴的交点横坐标作为方程根的近似值。按此方法进行迭代计算,直到满足精度要求为止。设计题十二常微分方程的数值解法及Matlab实现问题思路与设计思路欧拉方法是解常微分方程初值问题最简单最古老的一种数值方法,其基本思路就是把df=f(x,y)中的导数项df用差商逼近,从而将一个微分方程转化为一个代数方程,以便求解。龙格-库塔方法的基本思路是想办法计算f(x,y)在某些点上的函数值,然后对这些函数值做数值线性组合,构造出一个近似的计算公式;再把近似的计算公式和解的泰勒展开式相比较,使得前面的若干项相吻合,从而达到较高的精度。5.2程序清单(1)欧拉法:创建M文件euler.mfunction[x,y]=euler1(fun,x0,xfinal,y0,n)ifnargin<5,n=50;endh=(xfinal-x0)/n;x(1)=x0;y(1)=y0;fori=1:nx(i+1)=x(i)+h;y(i+1)=y(i)+h*feval(fun,x(i),y(i));end定义函数方程组中的函数f1,创建f1.m文件functionf=f1(x,y)f=y-2*x/y在matlab命令窗口输入:(2)龙格-库塔方法:function[]=LGKT(h,x0,y0,X,Y)formatlongh=input('h=');x0=input('x0=');y0=input('y0=');disp('输入的范围是:‛);X=input('X=');Y=input('Y=');n=round((Y-X)/h);i=1;x1=0;k1=0;k2=0;k3=0;k4=0;fori=1:1:nx1=x0+h;k1=-X0*y0八2;k2=(-(x0+h/2)*(y0+h/2*k1)A2);k3=(-(x0+h/2)*(y0+h/2*k2)A2);k4=(-(x1)*(y0+h*k3)A2);y1=y0+h/6*(k1+2*k2+2*k3+k4);x0=x1;y0=y1;y=2/(1+x0A2);fprintf('结果=%.31%.71%.7「口'不1,丫1,丫);endend结果分析(1)欧拉法在matlab命令窗口输入:plot(x,y,'r*-',x,sqrt(1+2*x),'g+--‘;xlabel('x’);ylabel('y');title('y=y-2x/y'川egend('数值解‘,‘精确解‘)运行结果如下:h=0.25x0=0y0=2运行结果如下:LGKTh=0.25x0=0y0=2h=0.25x0=0y0=2输入的范围是:X=0Y=5结果=0.250,1.8823080,1.8823529结果=0.500,1.5998962,1.6000000结果=0.750,1.2799478,1.2800000结果=1.000,1.0000271,1.0000000结果=1.250,0.7805556,0.7804878结果=1.500,0.6154594,0.6153846结果=1.750,0.4923742,0.4923077结果=2.000,0.4000543,0.4000000结果=2.250,0.3299396,0.3298969结果=2.500,0.2758952,0.2758621结果=2.750,0.2336023,0.2335766结果=3.000,0.2000200,0.2000000结果=3.250,0.1729886,0.1729730结果=3.500,0.1509558,0.1509434结果=3.750,0.1327899,0.1327801结果=4.000,0.1176550,0.1176471结果=4.250,0.1049245,0.1049180结果=4.500,0.0941229,0.0941176结果=4.750,0.0848850,0.0848806结果=5.000,0.0769267,0.0769231设计总结常微分方程在科学技术和工程中占有重要的地位,这里主要应用的是欧拉方法、龙格库塔法。它们都是都是采用单步法求常微分方程的数值解。从构造过程看来,它们互相联系但它们又互有差异,它们的精度不同,在每步的迭代过程产生的误差不一样。一般来说,欧拉方法较大,而龙格库塔法法产生的误差较小。因此,我们可以根据实际的需要,采取不同的方法求常微分方程的数值解。数值分析课程设计总结通过此次课程设计,使我更加扎实的掌握了 方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。由于能力有限,部分功能尚未实现,但是我想至少我做了,也掌握了不少课外的知识。过而能改,善莫大焉。在课程设计过程中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的检测调试环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次课程设计终于顺利完成了,在设计中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到问题就想到要退缩,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上劈荆斩棘,而不是知难而退,那样永远不可能收获成功,收获喜悦,也永远不可能得到社会及他人对你的认可!课程设计诚然是一门专业课,给我很多专业知识以及专业技能上的提升,同时又是一门讲道课,一门辩思课,给了我许多道,给了我很多思,给了我莫大的空间。同时,设计让我感触很深

温馨提示

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

评论

0/150

提交评论