插值和拟合

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

插值和拟合的定义

1.定义:若x为自变量,y为因变量,则x与y之间有一个确定的函数表达式f(x),现实中,这个函数关系式很难确定,运用逼近的方法处理:取得一组数据点(xi,yi,i=1,2,3...n),构造一个简单函数p(x)作为f(x)的近似表达式,且p(x)满足:

p(xi)=f(xi)=yi i=1,2,3,4...n

这就是插值问题。

若不要求p(x)通过所有数据点,而是要求曲线在某种准则下整体与数据点接近,例如运用最小二乘法得到p(x),这种问题称为拟合。

2插值类型:一维插值是指对一维函数y=f(x)进行插值,二维插值就是对二维函数y=f(x,y)进行插值.

3.插值的matlab函数及其应用

(1).一维插值:yi=interp1(x,Y,xi,’method’),对一组节点(x,Y)进行插值,计算插值点xi 的函数值。method包括了一下几种类型:

Nearest:线性最邻近插值(速度最快,平滑性最差)

Linear:线性插值(默认项)(生成效果连续,但是顶点处有坡度变化)

Spline:三次样条插值(运行时间较长,插值数据和导数均连续)

Pchip:分段三次艾米尔特(hermite)插值

Cubic:双三次插值(较高版本的matlab不能运用,v5cubic能够运行)

运行的代码及插值效果:

clear;

clc;

x=0:0.2:2;

y=(x.^2-3*x+5).*exp(-3*x).*sin(x);

xi=0:0.03:2;

yi_nearest=interp1(x,y,xi,'nearest');

yi_linear=interp1(x,y,xi,'linear');

yi_spline=interp1(x,y,xi,'spline');

yi_pchip=interp1(x,y,xi,'pchip');

yi_cubic=interp1(x,y,xi,'v5cubic');

figure;

hold on;

subplot(2 ,3, 1);

plot(x,y,'r*');

title('已知数据值');

subplot(2, 3 ,2);

plot(x,y,'r*',xi,yi_nearest,'b-');

title('最邻近插值');

subplot(2,3,3);

plot(x,y,'r*',xi,yi_linear,'b-');

title('线性插值');

subplot(2,3,4);

plot(x,y,'r*',xi,yi_spline,'b-');

title('三次样条插值');

subplot(2,3,5);

plot(x,y,'r*',xi,yi_pchip,'b-');

title('分段三次艾尔米特插值');

subplot(2,3,6);

plot(x,y,'r*',xi,yi_cubic,'b-');

title('三次多项式插值');

(2).二维插值:第一类,二维网格数据插值zi=interp2(x,y,z,xi,yi,’method’),其中x,y为数据采样点,即为真实所测得的数据,返回值为xi,yi的插值函数值。

method与一维插值相同。

各个方法所得的插值效果和代码如下:

clear;clc;

[x,y]=meshgrid(-3:0.25:3);

z=peaks(x,y);

[xi,yi]=meshgrid(-3:0.125:3);

z1=interp2(x,y,z,xi,yi,'linear');

z2=interp2(x,y,z,xi,yi,'nearest'); z3=interp2(x,y,z,xi,yi,'spline'); z5=interp2(x,y,z,xi,yi,'cubic'); subplot(2,2,1);

mesh(x,y,z);

hold on;

mesh(xi,yi,z1+15);

axis([-3,3,-3,3,-8,25]);

title('二维网格双线性插值');

subplot(2,2,2);

mesh(x,y,z);

hold on;

mesh(xi,yi,z2+15);

axis([-3,3,-3,3,-8,25]);

title('二维网格最邻近插值');

subplot(2,2,3);

mesh(x,y,z);

hold on;

mesh(xi,yi,z3+15);

axis([-3,3,-3,3,-8,25]);

title('二维网格样条插值');

subplot(2,2,4);

mesh(x,y,z);

hold on;

mesh(xi,yi,z5+15);

axis([-3,3,-3,3,-8,25]);

title('二维网格双三次插值');

第二类:二维散点数据插值:zi=griddata(x,y,z,xi,yi,’method’),各个输入值与interp2 的相同,不再赘述。Method为Cubic不能运行,应采用v4方法进行插值。运行代码的效果图如下:

clear;clc;

rand('seed',0);

x=rand(100,1)*4-2;

y=rand(100,1)*4-2;

z=x.*exp(-x.^2-y.^2);

ti=-2:0.25:2;

[xi,yi]=meshgrid(ti,ti);

z1=griddata(x,y,z,xi,yi,'linear');

z2=griddata(x,y,z,xi,yi,'cubic');

z3=griddata(x,y,z,xi,yi,'nearest');

z4=griddata(x,y,z,xi,yi,'v4');

subplot(2,2,1);

mesh(xi,yi,z1);

hold on;

title('线性插值');

plot3(x,y,z,'o');

subplot(2,2,2);

mesh(xi,yi,z2);

相关文档
最新文档