《MATLAB实现拉格朗日插值》由会员分享,可在线阅读,更多相关《MATLAB实现拉格朗日插值(7页珍藏版)》请在金锄头文库上搜索。
1、interp1 interpft interp2 interp3 interpn spline meshgrid ndgrid griddata一维数据内插(查表法) 使用FFT方法的一维数据内插 二维数据内插(查表法) 三维数据内插(查表法) 多维数据内插(查表法) 三次样条内插为三维绘图产生X和Y阵 为多维函数和内插产生阵列 数据网格一、调用MATLAB内带函数插值1、MATLAB内带插值函数列举如下:数值分析上机报告题目:插值法 学号:201014924 姓名:靳会有2、取其中的一维数据内插函数(interpl)为例,程序如下: 其调用格式为:yi=interp1(x, y, xi) y
2、i=interp1(x, y, xi, method)举例如下:x=0:10:100y=40 44 46 52 65 76 80 82 88 92 110; xi=0:1:100yi=interp1(x,y,xi,spline)3、其他内带函数调用格式为:Interpft 函数: y=interpft(x,n)y=interpft(x,n,dim)interp2 函数:ZI= i n t e r p 2 (X, Y, Z, XI, YI), ZI=imerp2(Z,ntimes) ZI=interp2(Z,XI,YI) ,ZI=interp2(X,Y,Z,XI,YI, met hod) int
3、 erp3 函数:VI=interp3(X,Y,Z,V,XI,YI,ZI) VI=interp3(V,ntimes)VI二in terp3(V,XI,YI,ZI)VI二in terp3(,method)Interpn 函数:VI=interpn(X1, X2, X3, , V, Y1, Y2, Y3, ) VI=interpn(V, ntimes)VI二int erpn(V, Yl, Y2, Y3, ) VI二int erpn(, method)Spline 函数: yi=spline(x,y,xi) pp=spline(x,y)meshgrid 函数: X,Y=meshgrid(x,y) X
4、,Y=meshgrid(x) X,Y,Z=meshgrid(x,y,z)Ndgrid 函数:XI, X2, X3, 二ndgrid(xl, x2, x3, ) XI, X2, X3,二ndgrid(x)Griddata 函数:ZI=griddata(x, y, z, XI, YI)XI, YI, ZI=griddata(x, y, z, xi, yi) 二gridda ta( met hod)二、自编函数插值 1、拉格朗日插值法:建立M文件:fun cti on f = Lan guage(xyxO)syms t I;if(le ngth(x) = len gth(y)n = len gth(
5、x);elsedisp(x和y的维数不相等!);retur n;% 检错endh=sym(0);for (i=1: n)l=sym(y(i);for(j=1:i-1)l=l*(t-x(j)/(x(i)-x(j);en d;for(j=i+1: n)l=l*(t-x(j)/(x(i)-x(j);en d;h=h+l;endsimplify(h);if( nargin = 3)f = subs (h,t,x0); %计算插值点的函数值elsef=collect(h);f = vpa(f,6); %将插值多项式的系数化成6位精度的小数end在MATLAB中输入:x=18 31 66 68 70 72
6、 70;y=23 33 52 51 43 40 46;f=La nguage(x,y) plot(x,y) 结果为:f =lnf + (-t)*Inf - 54329.8P2 + 1503.75P3 - 22.2065*tA4 + 0.16789P5 -0.000512106P6图形如下:MATLAB实现拉格朗日插值建立如下拉格朗日插值函数: function y=lagrange(x0,y0,x); n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:n if j=k p=p*(z-x0(j)/(x0(k
7、)-x0(j); endend s=p*y0(k)+s;endy(i)=s;end 画图程序如下: x=-5:1:5;y=l./(l+x.八2);x0=-5:0.001:5; y0=lagrange(x,y,x0);yl=l./(l+x0.八2);plot(x0,y0,r)hold on plot(x0,y1,g)注:画出的图形为n =10的图形得到图形如下:牛顿K次插值多项式一、实验目的:1、掌握牛顿插值法的基本思路和步骤。2、培养编程与上机调试能力。二、牛顿插值法基本思路与计算步骤:给定插值点序列(x , f (x ) , i 0,1, n,。构造牛顿插值多项式N (u)。输入要计算iin
8、的函数点X,并计算N (x)的值,利用牛顿插值公式,当增加一个节点时,只需在后面多计算 n一项,而前面的计算仍有用;另一方面N (x)的各项系数恰好又是各阶均差,而各阶均差可用 n均差公式来计算。心为八D的一阶均差。/T,”T ,” 1 ./I 占L :耳亠立+ 巫西丄|_/1城*西匚甩 I = f/ rX为八” 的k阶均差。均差表:零阶均一阶均差二阶均差三阶均差差X0f(X0)X1f(X1)fX, X0 1X2ffX, X1 2fx,x, X0 1 2X3fg)fX, X23fX, X,X123fX,X, X0 1 2X3MMMMM牛顿插值法计算步骤:1. 输入n值及(Xif Wi 丄n,;
9、要计算的函数点x。2. 对给定的x,由计算(X)的值。3输出N(x)。程序清单:func tio nc, d二newpoly(x, y)%牛顿插值的MATLAB实现%这里x为n个节点的横坐标所组成的向量,y为纵坐标所组成的向量。 %c为所求的牛顿插值多项式的系数构成的向量。n=length(x);%取 x 的个数。 d=zeros(n, n);%构造nXn的空数组。 d(: , 1)=y;for j=2 : n for k=j : n d(k, j)=(d(k, j-1) - d(k-1, j-1) / (x(k)-x(k-j+1);endendc =d(n, n);for k=(n-1) :
10、 - 1 : 1c =conv(c, poly(x(k);% conv求积,poly(x)将该多项式的系数赋给向量。 m=length(c);c(m)=c(m)+d(k, k);end五、测试数据与结果: 测试数据:(第三章习题第三题第2题)f(x)=lnx的数值如表所示,构造牛顿插值多项式并求ln0.53的值。X0.40.50.60.70.8ln-0.91-0.69-0.5108-0.3577-0.22314x6291314726654解: 由表可知 x =0.4, x =0.5, x =0.6, x =0.7, x =0.7,函数值:01234Y0=-0.916291,y1=-0.693147,y2=-0.510826,y3=-0.357765,y4=-0.223144建立一个主程序np.m clcclearnewpoly(0.4,0.5,0.6,0.7,0.8, -0.916291, -0.693147, -0.510826, -0.357765, -0.223144)计算结果如下:ans =-0.30962.6083 -5.4861 5.6921 -2.4744由此看出所求的牛顿多项式为:P(x)= -0.3096x4+2.6083x3-5.4861x2+5.6921x-2.4744P(0.53)= -0.6347。