插值和拟合

2020-04-21 08:40

插值和拟合的定义

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);

hold on;

plot3(x,y,z,'o'); title('三次插值'); subplot(2,2,3); mesh(xi,yi,z3); hold on;

plot3(x,y,z,'o'); title('最邻近插值') subplot(2,2,4); mesh(xi,yi,z4); hold on;

plot3(x,y,z,'o'); title('v4插值');

三维插值的matlab函数有interp3,三维数据网格产生的函数为ndgrid。若想详细了解,请参考matlab的help文档。

(二).拟合的matlab函数调用

(1)多项式拟合:一般多项式拟合的目的是找出一组多项式系数ai(i=1 ,2,3,4...n+1)使得多项式

?(x)?a1xn?a2xn?1?a3xn?2?...?an?1能够较好的拟合数据。调用格式如下:

[p,s,mu]=polyfit(x,y,n),对x,y进行n维多项式最小二乘法拟合,输出结果p为n+1个


插值和拟合.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:太阳高度角计算公式 

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: