您好,欢迎访问三七文档
常见插值法【摘要】插值方法在数值分析中起着非常重要的作用。在此介绍一些常见的插值方法及其应用范例。【关键字】数值分析;插值方法;应用;1.插值法定义插值法又称“内插法”,是利用函数f(x)在某区间中插入若干点的函数值,作出适当的特定函数,在这些表(1)插值点点上取已知值,在区间的其他点上用这特定函数的值作为函数f(x)的近似值,这种方法称为插值法。如果这特定函数是多项式,就称它为插值多项式。2.常见的插值法及其构造Lagrange插值法(a).公式推导:表(1)的Lagrange插值的插值多项式niiixlxfx0n)()()(L,(j=0,1,2....n)。其中插值基函数是njiijijxxxxxl0n)()()(,(i,j=0,12...n)。其插值余项为其中),ba(,njiijijxxxxx01n)()()((b).matlab实现方法:Matlab没有直接求解的相关函数,现编译如下:functionyi=Lagarange_chazhi(x,y,xi)%求拉格朗日插值,并返回一个输入为xi时的函数值%x为插值点向量,至少有三项%y为插值点值的向量,项数与x相同m=length(x);%求插值个数m1=length(y);ifm=2error('项数不足!');endifm~=m1error('!!!y的项数应与x相同!!!');end%对参数的判断lag_hanshu=0;symsX;for(l=1:m)%构造插值基函数la=y(l);fora=(1:l-1)la=la*(X-x(a))/(x(l)-x(a));endfora=(l+1:m)la=la*(X-x(a))/(x(l)-x(a));endformatlonglag_hanshu=lag_hanshu+la;%求解出插值函数endyi=subs(lag_hanshu,'X',xi);%返回插值函数输入为xi时的值End(c).方法缺陷:当插值点个数7n时,将产生龙格现象:经典例子,对)251(1)(2xxf进行拉格朗日插0x1x2x.......1-nxnx0y1y2y.......1-nyny),(!)1()()()()(1)1(xnfxLxfxRnnnn0xabxn1x2x1nx值图(1)中从左到右,从上到下,n分别为图(1)Lagarange插值法的龙格现象4,5...11,可以看出,当7n后,它的\插值函数在两个端点处发生剧烈的波动,造成较大的误差。所以拉格朗日插值法一般不适用于高次插值。分段线性插值法(a).插值原理:为避免高次产生的龙格现象,采用分段插值,相邻两节点间的函数为一次线性函数,图形为线段,在[a,b]间为折线,如图(2)。图(2)分段线性插值(b).matlab实现方法:Matlab中没有现成的函数,现编译如下:functionFenduan_liner(x,y)%对x,y进行分段线性插值%用虚线画出插值后的函数m=length(x);%求插值个数m1=length(y);ifm~=m1error('!!!y的项数应与x相同!!!');end%对参数的判断holdon;forii=1:m-1plot([x(ii)x(ii+1)],[y(ii)y(ii+1)]);%画出线段endplot(x,y,'o');%画出插值点end(c).方法缺陷:在节点处曲线不平滑。保形插值(Hermite插值)(a).插值原理:针对分段插值法不光滑的问题,Hermite插值引入插值点的导数。表(2)Hermite插值法由于若],[)(1baCxf且已知)(xf函数表及导数表,则存在唯一不超过12n次多项式)(12xHn满足插值条件'1212)()(iyxHyxHiniin),....,1,0(ni则,通过求解方程,可得出插值函数其插值余项为),(ba且与x有关。(b).matlab实现方法:Matlab中没有现成的函数,现编译如下:functionyi=Hermite(x,y,der_y,xi)%对x,y进行Hermite插值,其各节点的导数为der_y%返回值为带入矩阵xi后的函数值iflength(x)==length(y)iflength(y)==length(der_y)nnnyyyxfyyyxfxxxx101010)()()()!22()(21)22(xnfnn)(12xRnn=length(x);%求插值个数endelseerror('!!!y的项数应与x相同!!!');endifn=1warning('项数不足!');end%对参数的判断symsX;H=0;forjj=1:na=0;b=0;l=1;forii=1:nifii~=jja=a+1/(x(jj)-x(ii));l=l*(X-x(ii))/(x(jj)-x(ii));endendA=(1-2*(X-x(jj))*a)*l^2;B=(X-x(jj))*l^2;H=H+(A*y(jj)+B*der_y(jj));%迭代法求Hendyi=subs(H,'X',xi);end(c).方法缺陷:无法获得各点的导数④三次样条法(a).插值原理:对每两个点间进行三次多项式的插值,且通过端点导数推导出各点导数,使得插值函数在插值点处导数相等。(b).matlab实现方法:Matlab有现成的函数spline,以下为‘helpspline’“PP=spline(X,Y)providesthepiecewisepolynomialformofthecubicsplineinterpolanttothedatavaluesYatthedatasitesX,forusewiththeevaluatorPPVALandthesplineutilityUNMKPP.Xmustbeavector.”⑤插值法关系图3.插值法对比例证对]1,1-[,25112xxy,在x=-1,-0.5,0,0.5,1点处插值代码如下:symsX;Y=1./(1+25*X^2);x=-1:0.5:1;y=subs(Y,'X',x);der_y=subs(diff(Y),'X',x);xi=-1:0.01:1;yi=1./(1+25*xi.^2);yi_Lagarange=Lagarange_chazhi(x,y,xi);yi_Hermite=Hermite(x,y,der_y,xi);yi_Yangtiao=spline(x,y,xi);holdon;plot(x,y,'o',xi,yi,'b');%画出分段插值Fenduan_liner(x,y);%画出拉格朗日插值plot(xi,yi_Lagarange,':g');%画出Hermite插值plot(xi,yi_Hermite,':');%画出三次样条插值plot(xi,yi_Yangtiao,'--g');lagarange插值法龙格现象分段线性插值法节点不光滑Hermite插值法导数不易得到三次样条插值法降次防止龙格现象光滑节点处导数相同由边界条件推导各节点导数结果图形为(注:蓝色实线为原函数,蓝色圆点为插值点,蓝色短虚线为分段线性插值,蓝色点虚线为Hermite插值,绿色点虚线为Lagarange插值,绿色短虚线为三次样条插值)结果分析:所有插值法中,分段线性插值最贴近原函数,其次Hermite插值法,再其次为三次样条,与Lagarange插值法接近。但分段线性插值法在结点处不光滑,Hermite导数信息不易获得,Lagarange插值法虽然计算简单,但高次产生龙格现象,所以三次样条插值法比较实用。【参考文献】1.MATLAB数值分析第2版机械工业出版社张德丰等编著
本文标题:常见插值法
链接地址:https://www.777doc.com/doc-4853735 .html