计算方法实验报告-2_第1页
计算方法实验报告-2_第2页
计算方法实验报告-2_第3页
计算方法实验报告-2_第4页
计算方法实验报告-2_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

实验报告计算方法算法设计及其MATLAB实现院系:数学科学学院专业:学号:姓名:实验1插值方法——拉格朗日插值法一、实验目的[1]了解lagrange插值法的基本原理和方法;[2]通过实例掌握用MATLAB求插值的方法;[3]编程实现lagrange插值

二、方法原理Lagrange插值公式y=,两点插值和三点插值分别是lagrange的n=1,2的特殊情况。Lagrange的插值算法:没给定数据表(),i=0,1,2…….n及插值点x,根据lagrange求得的插值结果y。三、实验流程(略)四、实验内容MATLAB文件:function[y0,N]=Lagrange_eval(X,Y,x0)formatlonge;m=length(X);N=zeros(m,1);y0=0;fori=1:mN(i)=1;forj=1:mifj~=iN(i)=N(i)*(x0-X(j))/(X(i)-X(j));endendy0=y0+Y(i)*N(i);end算例:已知f(x)=lnx的数值表如下,计算lagrange插值多项式在x=x0处的值。x0.30.40.50.6lnx-1.203973-0.916291-0.693147-0.510826表SEQ表\*ARABIC1解答结果:线性插值结果:二次插值结果:三次插值结果:五、实验分析而ln0.45准确值为

-0.79850769621777,针对所给数据表时运用插值方法,人们往往迭代的插值节点越多,插值结果就越准确,这种观点并不一定可靠,实际计算结果表明,如果选取的节点越多,lagrange插值结果反而会严重失真,因此,我们要因题选取适当的节点。实验二、插值方法——Hermite插值一、实验目的1、学习和掌握Hermite算法的思想;2、学会利用分段三次Hermite插值计算插值点处的函数近似值。二、插值算法的基本思想:函数的变化规律往往是通过一组实验数据给出,为了研究此变化规律往往需要求出不在表上的一些函数值。因此我们希望根据给定的函数表做一个既能反函数的特性,又便于计算的简单函数,用近似。通常选一类较简单的函数作为,并使这样确定的就是我们希望得到的插值函数,主要有①Lagrange插值;②Newton插值;③Hermit插值;④分段线性插值;⑤三次样条插值。三、算法步骤:1)输入各个节点和节点的函数值及对应导数值;定义;3)用拉格朗日基函数求出4)最后用Hermite插值公式,满足计算次数不超过2N+1的多项式。流程图(略)四、实验内容MATLAB文件:functiony0=Hermite_interp(X,Y,DY,x0)formatlongeN=length(X);fori=1:Nifx0>=X(i)&x0<=X(i+1)k=i;break;endenda1=x0-X(k+1);a2=x0-X(k);a3=X(k)-X(k+1);y0=(a1/a3)^2*(1-2*a2/a3)*Y(k)+(-a2/a3)^2*(1+2*a1/a3)*Y(k+1)+(a1/a3)^2*a2*DY(k)+(-a2/a3)^2*a1*DY(k+1);算例:已知lnx在x1=0.40,x2=0.50,x3=0.60,x4=0.70处的函数值及导数值使用分段三次Hermite插值公式计算lnx在x=0.54处的函数值。实验结果:Hermite插值五、实验分析Lnx在x=0.54处的准确值为-0.61618613942382,由此可知,用分段三次Hermite插值公式求解的精度还是比较高的。实验三、数值积分的复化Simpson公式实验目的掌握复化的Simpson公式的计算积分方法;掌握数值微分的方法进行计算;体会不同运行环境下进行积分运算的思想与理解;实验环境MATLABVC++6.0实验内容用复化的Simpson公式计算积分:实验算法与结果MATLAB运行环境:functionS=FSimpson(f,a,b,N)formatlongeh=(b-a)/N;fa=feval(f,a);fb=feval(f,b);S=fb+fa;x=a;fori=1:Nx=x+h/2;fx=feval(f,x);S=S+4*fx;x=x+h/2;fx=feval(f,x);S=S+2*fx;endS=h*S/6;注:functionf=f1(x)f=x/(4+x^2);解答:当N=16时,结果为:当N=256时,结果为:当N=64时,结果为:当N=256时,结果为:VC++6.0运行环境:#include<stdio.h>#include<math.h>#definee1e-5#definea0#defineb1#definef(x)(4/(1+(x*x)))intmain(){ inti,n; doublef1,f2,f3,h,s0,s; f1=f(a)+f(b); f2=f(((double)(b+a)/2));f3=0; s=((double)(b-a)/6)*(f1+4*f2);n=2; h=(double)(b-a)/4; do { f2+=f3;s0=s;f3=0; for(i=1;i<=n;i++) f3+=f((a+(2*i-1)*h)); s=(h/3)*(f1+2*f2+4*f3);n*=2;h/=2; } while(fabs(s-s0)>e); printf("%.8lf\n",s); return0;}结果:实验四、数值积分——Romberg加速算法一、实验目的1、掌握和学习数值积分的Romberg的算法思想;2、理解并运用Romberg加速算法进行数值积分;3、体会Romberg加速算法的优越性。二、实验原理Romberg算法是通过对Simpson算法的再加速;和Cotes算法的进一步加速,从而将收敛速度缓慢的值序列加工成收敛迅速的Romberg值序列。三、实验流程图(略)四、实验内容function[quad,R]=Romberg(f,a,b,eps)formatlongeh=b-a;R(1,1)=h*(feval(f,a)+feval(f,b))/2;M=1;J=0;err=1;whileerr>epsJ=J+1;h=h/2;S=0;forp=1:Mx=a+h*(2*p-1);S=S+feval(f,x);endR(J+1,1)=R(J,1)/2+h*S;M=2*M;fork=1:JR(J+1,k+1)=R(J+1,k)+(R(J+1,k)-R(J,k))/(4^k-1);enderr=abs(R(J+1,J)-R(J+1,J+1));endquad=R(J+1,J+1);注:functionf=f1(x)f=x/(4+x^2);算例:利用Romberg加速算法计算积分R=解答:(1)当eps=10^-4时Romberg值如下:(2)当eps=10^-7时Romberg值如下:实验分析通过以上可知Romberg算法的加速效果是明显的,Romberg算法是一个优秀的算法。实验五、改进的Euler方法一、实验目的二、实验原理先用Euler格式求得一个初步的近似值,记为称之为预报值;预报值的精度不高;用它替代右端的再直接进行计算,得到校正的值。三、实验流程(略)四、实验内容程序:functionE=MendEuler(f,a,b,N,ya)formatlongeh=(b-a)/N;y=zeros(1,N+1);x=zeros(1,N+1);y(1)=ya;x=a:h:b;fori=1:Ny1=y(i)+h*feval(f,x(i),y(i));y2=y(i)+h*feval(f,x(i+1),y1);y(i+1)=(y1+y2)/2;endE=[x',y'];注意:functionz=f2(x,y)z=x^2-y;func

温馨提示

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

评论

0/150

提交评论