MATLAB实现拉格朗日插值精编版

  • 格式:docx
  • 大小:92.61 KB
  • 文档页数:9

下载文档原格式

  / 9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数值分析上机报告

题目:插值法

学号:201014924

姓名:靳会有

一、调用MATLAB内带函数插值

1、MATLAB内带插值函数列举如下:

2、取其中的一维数据内插函数()为例,程序如下:其调用格式为:

yi=interp1(x, y, xi)

yi=interp1(x, y, xi, method)

举例如下:

x=0:10:100

y=[40 44 46 52 65 76 80 82 88 92 110];

xi=0:1:100

yi=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,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]=meshgrid(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; %检错

end

h=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;

end

simplify(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 46];

f=Language(x,y)

plot(x,y)

结果为:

f =Inf + (-t)*Inf - 54329.8*t^2 + 1503.75*t^3 - 22.2065*t^4 + 0.16789*t^5 -

0.000512106*t^6

图形如下:

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*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 on

plot(x0,y1,'g')

注:画出的图形为n =10的图形得到图形如下:

牛顿K 次插值多项式

一、实验目的:

1、掌握牛顿插值法的基本思路和步骤。

2、 培养编程与上机调试能力。

二、牛顿插值法基本思路与计算步骤:

给定插值点序列())(,i i x f x ,,,1,0,n i 。构造牛顿插值多项式)(u N n 。输入要计算的函数点,x 并计算)(x N n 的值,利用牛顿插值公式,当增加一个节点时,只需在后面多计算一项,而前面的计算仍有用;另一方面)(x N n 的各项系数恰好又是各阶均差,而各阶均差可用均差公式来计算。

为 的 一阶均差。

的 k 阶均差。

均差表:

n=10的图像