拉格朗日插值实验报告_第1页
拉格朗日插值实验报告_第2页
拉格朗日插值实验报告_第3页
拉格朗日插值实验报告_第4页
拉格朗日插值实验报告_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

实验名称:实验一拉格朗日插值1引言我们在生产生活中常常会遇到这样的问题:某个实际问题中,函数f(x)在区间[a,b]上存在且连续,但却很难找到其表达式,只能通过实验和观测得到有限点上的函数表。显然,根据这些点的函数值来求其它点的函数值是非常困难的。有些情况虽然可以写出表达式,但结构复杂,使用不方便。所以我们总是希望根据已有的数据点〔或函数表〕来构造某个简单函数P(x)作为f(x)的近似值。插值法是解决此类问题的一种比较古老的、但却很常用的方法。它不仅直接广泛地应用于生产实际和科学研究中,而且也是进一步学习数值计算方法的基础。2实验目的和要求运用Matlab编写三个.m文件,定义三种插值函数,要求一次性输入整张函数表,并利用电脑选择在插值计算中所需的节点。分别通过分段线性插值、分段二次插值和全区间上拉格朗日插值计算f(0.15),f(0.31),f(0.47)的近似值。已知函数表如下:x0.00.10.1950.30.4010.5f(x)0.398940.396950.391420.381380.368120.352063算法原理与流程图〔1〕原理设函数y=在插值区间[a,b]上连续,且在n+1个不同的插值节点a<x0,x1?_,xn<b上分别取值y0,y1?—,yn°目的是要在一个性质优良、便于计算的插值函数类①中,求一简单函数P(x),满足插值条件P(Xi)=yi(i=O,l,...,n),而在其他点x#xi上,作为f(x)近似值。求插值函数P(x)的方法称为插值法。在本实验中,采用拉格朗日插值法。①分段低次插值当给定了n+1个点x0vX]<...<xn上的函数值y0,y],...,yn后,假设要计算x#xi处函数值f(x)的近似值,可先选取两个节点xi-1与台使xe[xi-1,xi],然后在小区间[和旳上作线性插值,即得X-xx-xf(X)沁P(x)=y1+y—1i-1x-xix-xi-1iii-1这种分段低次插值叫分段线性插值,又称折线插值。类似地,我们可以选取距离x最近的三个节点xi-1,xi与xi+1,然后进行二次插值,即得f(x)〜P(x)=2y門[二]2k=/-1kj=i-11xk-xj丿-j*k-这种分段低次插值叫分段二次插值,又称分段抛物线插值。

②全区间上拉格朗日插值对节点Xj(i=O丄…,n)中任一点xk(0<k<n),作一n次多项式lk(x),使它在该点上的取值为1,在其余点小=0丄…,k-l,k+l,...,n)上取值为零。对应于每一节点xk(k=O丄…,n),都能写出一个满足此条件的多项式,这样写出了n+1个多项式l0(x),l1(x),_,ln(x),其中l(x)=A(x-x)(x-x)...(x-x)(x-x)...•(x-x);TOC\o"1-5"\h\zkk01k-1k+1n由条件l(x)=1可得kkA=-—k(x-X)…(X-x)(x-x)…(X-x)k0kk-1kk+1kn于是我们可以得出如下的拉格朗日n次插值多项式〔对于全区间上的插值,n取函数表的长度〕(2)流程图]=2f3f"'n-2按盘式让算巴何LMmi斗h.■■u分段线性插值P(x)(2)流程图]=2f3f"'n-2按盘式让算巴何LMmi斗h.■■u分段线性插值P(x)=yl(x)+yl(x)+…yl(x)oo(x-n=£y11nnx)…(x-x)(x-x)…(x-x)—0^-1kI1,-X)…(X-x)(x-x)…(X0kk-1kk+1-xn-Xknk=lf2t"17P—lI^u-i按殳式ii<n+IiS=S+yt(k)*p端出S分段二次插值全区间拉格朗日插值4程序代码及注释1、分段线性插值%分段线性插值functiony=piecelinear(x0,y0,x)%x0,yO为已知点,x为待求点n=length(xO);p=length(yO);m=length(x);%n,p,m分另I」为xO,yO,x长度ifn~=pfprintf'Error!Pleaseinputagain!\n');%xO和y0长度不等时,报错elsefori=1:mz=x(i);sum=0.0;l=0;%给丄赋初值,根据x的值确定lifz<x0(1)|z>x0(n)fprintf'Error!x(%d)isoutofrange!\n',i);break;end%当插值点超出范围时,报错forj=2:nifz<x0(j)l=j;endifl~=0break;endend%—旦l有非零值,则终止循环,选出合适的lfork=l-1:la=1.0;fors=l-1:lifs〜=ka=a*(z-x0(s))/(x0(k)-x0(s));endendsum=sum+y0(k)*a;endy(i)=sum;fprintf'y(%d)=%f\nx1=%.3fy1=%.5f,x2=%.3fy2=%.5f\n\n',i,y(i),x0(l-1),y0(l-1),x0(l),y0(l));%输出插值结果和所需节点endendend2、分段二次插值%分段二次插值functiony=piece_square(xO,yO,x)%x0,yO为已知点,x为待求点n=length(xO);p=length(yO);m=length(x);%n,p,m分另I」为xO,yO,x长度ifn~=pfprintf'Error!Pleaseinputagain!\n');%xO和y0长度不等时,报错elsefori=1:mz=x(i);sum=0.0;l=0;%给丄赋初值,根据x的值确定lifz<x0(1)|z>x0(n)fprintf'Error!x(%d)isoutofrange!\n',i);break;end%当插值点超出范围时,报错forj=1:n-2p=0.5*(x0(j)+x0(j+1));ifz<pl=j;endifl~=0break;end%—旦l有非零值,则终止循环,选出合适的lendifl==0l=n-1;end%输入正确时,假设l还等于零,l=n-1fork=l-1:l+1a=1.0;fors=l-1:l+1ifs〜=ka=a*(z-x0(s))/(x0(k)-x0(s));endendsum=sum+y0(k)*a;endy(i)=sum;fprintf('y(%d)=%f\nx1=%.3fy1=%.5f\nx2=%.3fy2=%.5f\nx3=%.3fy3=%.5f\n\n',i,y(i),xO(l-1),yO(l-1),xO(l),yO(l),xO(l+1),yO(l+1));%输出插值结果与所需节点endendend3、拉格朗日全区间插值%拉格朗日全区间插值functiony=lagrange(xO,yO,x)%x0,yO为已知点,x为待求点n=length(xO);p=length(yO);m=length(x);%n,p,m分另I」为x0,y0,x长度ifn~=pfprintf'Error!Pleaseinputagain!\n');%x0和y0长度不等时,报错elsefori=1:mz=x(i);s=0.0;ifz<x0(1)|z>x0(n)fprintf'Error!x(%d)isoutofrange!\n',i);break;end%当插值点超出范围时,报错fork=1:np=1.0;forj=1:nifj~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;fprintf('y(%d)=%.5f\n',i,y(i));%输出插值结果endendend5算例分析1、测试例如>>x=[1234];>>y=[234];>>y2=lagrange(x,y,x0)Error!Pleaseinputagain!>>x=[1234];>>y=[2345];>>x0=[0.55.5];>>y2=lagrange(x,y,x0)Error!x(1)isoutofrange!>>x=[1234];>>y=[2345];>>x0=[1.55.5];>>y2=lagrange(x,y,x0)y(1)=2.50000Error!x(2)isoutofrange!y2=2.5000000000000002、首先输入函数变及待求点>>x=[0.00.10.1950.30.4010.5];>>y=[0.398940.396950.391420.381380.368120.35206];>>x0=[0.150.310.47];注:保证在matlab工作目录中有三个.m文件3、分段线性插值y0=piece_linear(x,y,x0)y(1)=0.394039x1=0.100y1=0.39695,x2=0.195y2=0.39142y(2)=0.380067x1=0.300y1=0.3813&x2=0.401y2=0.36812y(3)=0.356927x1=0.401y1=0.36812,x2=0.500y2=0.35206y0=0.3940394736842110.3800671287128710.3569266666666674、分段二次插值>>y1=piece_square(x,y,x0)y(1)=0.394460x1=0.100y1=0.39695x2=0.195y2=0.39142x3=0.300y3=0.38138y(2)=0.380225x1=0.195y1=0.39142x2=0.300y2=0.38138x3=0.401y3=0.36812y(3)=0.357247x1=0.300y1=0.38138x2=0.401y2=0.36812x3=0.500y3=0.35206y1=0.3944603195488720.3802246915953730.3572468448844885、全区间拉格朗日插值>>y2=lagrange(x,y,x0)y(1)=0.39447y(2)=0.38022y(3)=0.35722y2=0.3944728038780610.3802190624547320.3572221123394856讨论与结论1、使用tic,toc函数计算以下四种方法计算上述问题所运行的时间Functionlagrange(x0,y0,x)piece」inear(x0,y0,x)piecesquare(x0,y0,x)运行时间(s)0.0002720.0003750.000272从三次实验结果可知,三个程序的运行时间都很短。2、程序优化由分段线性插值和分段二次插值的原理,x取值在函数表范围内时,插值结果有意义,而当x取值在函数表范围以外,利用分段线性插值公式仍可以进行运算并得到一个值,但其结果不准确;分段二次插值则无法找到三个合适的点以求插值,不予以输出结果;假设输入的函数表x与y的长度不相等,则无法插值。所以加入以下判断以提高插值的准确性n=length(xO);p=length(yO);m=length(x);ifn~=pfprintf'Error!Pleaseinpu

温馨提示

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

评论

0/150

提交评论