《MATLAB实现拉格朗日插值》由会员分享,可在线阅读,更多相关《MATLAB实现拉格朗日插值(9页珍藏版)》请在金锄头文库上搜索。
1、数值分析上机报告题目:插值法学号:201014924姓名:靳会有一、调用MATLAB内带函数插值1、MATLAB内带插值函数列举如下:interp1interpftinterp2interp3interpnsplinemeshgridndgridgriddata一维数据内插(查表法)使用FFT方法的一维数据内插二维数据内插(查表法)三维数据内插(查表法)多维数据内插(查表法)三次样条内插为三维绘图产生X和Y阵为多维函数和内插产生阵列数据网格2、取其中的一维数据内插函数(interp1)为例,程序如下:其调用格式为: yi=interp1(x, y, xi) yi=interp1(x, y, x
2、i, 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=interp2(X, Y, Z, XI, YI), ZI=imerp2(Z, ntimes)ZI=interp2(Z, XI, YI) ,ZI=interp2(X, Y, Z, XI, YI, method) interp3函数:VI=interp3(X,Y,
3、Z,V,XI,YI,ZI) VI=interp3(V, ntimes)VI=interp3(V,XI,YI,ZI) VI=interp3(, method)Interpn函数: VI=interpn(X1, X2, X3, , V, Y1, Y2, Y3, ) VI=interpn(V, ntimes) VI=interpn(V, Yl, Y2, Y3, ) VI=interpn(, method)Spline函数:yi=spline(x,y,xi)pp=spline(x,y)meshgrid函数: X,Y=meshgrid(x,y) X,Y=meshgrid(x) X,Y,Z=meshgri
4、d(x,y,z) Ndgrid函数:X1, X2, X3, =ndgrid(x1, x2, x3, )X1, X2, X3, =ndgrid(x)Griddata函数:ZI=griddata(x, y, z, XI, YI) XI, YI, ZI=griddata(x, y, z, xi, yi) =griddata( method)二、自编函数插值1、拉格朗日插值法:建立M 文件:function f = Language(x,y,x0)syms t l;if(length(x) = length(y) n = length(x);else disp(x和y的维数不相等!); return;
5、 %检错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); end; for(j=i+1:n) l=l*(t-x(j)/(x(i)-x(j); end; h=h+l;endsimplify(h);if(nargin = 3) f = subs (h,t,x0); %计算插值点的函数值else f=collect(h); f = vpa(f,6); %将插值多项式的系数化成6位精度的小数end在MATLAB中输入:x=18 31 66 68 70 72 70; y=23 33 52 51 43 40 4
6、6;f=Language(x,y)plot(x,y)结果为:f =Inf + (-t)*Inf - 54329.8*t2 + 1503.75*t3 - 22.2065*t4 + 0.16789*t5 - 0.000512106*t6图形如下:MATLAB实现拉格朗日插值建立如下拉格朗日插值函数:function y=lagrange(x0,y0,x);n=length(x0);m=length(x);for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j=k p=p*(z-x0(j)/(x0(k)-x0(j); end end s=p*
7、y0(k)+s; end y(i)=s;end画图程序如下:x=-5:1:5;y=1./(1+x.2);x0=-5:0.001:5;y0=lagrange(x,y,x0);y1=1./(1+x0.2);plot(x0,y0,r)hold onplot(x0,y1,g)注:画出的图形为n =10的图形得到图形如下:n=10的图像 牛顿K次插值多项式一、实验目的:1、掌握牛顿插值法的基本思路和步骤。2、 培养编程与上机调试能力。二、牛顿插值法基本思路与计算步骤:给定插值点序列(。构造牛顿插值多项式。输入要计算的函数点并计算的值,利用牛顿插值公式,当增加一个节点时,只需在后面多计算一项,而前面的计算
8、仍有用;另一方面的各项系数恰好又是各阶均差,而各阶均差可用均差公式来计算。为 的 一阶均差。为 的 k 阶均差。均差表:零阶均差一阶均差二阶均差三阶均差X0f(X0)X1f(X1)fX0, X1X2f(X2)fX1, X2fX0,X1, X2X3f(X3)fX2, X3fX1, X2,X3fX0,X1, X2 X3MMMMM 牛顿插值法计算步骤:1 输入值及(;要计算的函数点。2 对给定的由 计算的值。3输出。 程序清单:functionc, d=newpoly(x, y) %牛顿插值的MATLAB实现 %这里 x为n个节点的横坐标所组成的向量,y为纵坐标所组成的向量。 %c为所求的牛顿插值多
9、项式的系数构成的向量。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); endend c =d(n, n); for k=(n-1) : - 1 : 1 c =conv(c, poly(x(k);% conv求积,poly(x)将该多项式的系数赋给向量。 m=length(c); c(m)=c(m)+d(k, k); end五、测试数据与结果:测试数据:(第三章习题第三题第2题)f(x)
10、=lnx的数值如表所示, 构造牛顿插值多项式并求ln0.53的值。X0.40.50.60.70.8lnx-0.916291-0.693147-0.510826-0.357765-0.223144解: 由表可知x0=0.4, x1=0.5, x2=0.6, x3=0.7, x4=0.7,函数值:Y0=-0.916291, y1=-0.693147, y2=-0.510826, y3=-0.357765, y4=-0.223144建立一个主程序np.mclcclearnewpoly(0.4,0.5,0.6,0.7,0.8, -0.916291, -0.693147, -0.510826, -0.357765, -0.223144)计算结果如下:ans = -0.3096 2.6083 -5.4861 5.6921 -2.4744由此看出所求的牛顿多项式为: P(x)= -0.3096x4+2.6083x3-5.4861x2+5.6921x-2.4744P(0.53)= -0.6347。