插值,数据拟合和迭代

前言

大多数原理不懂,只管输入输出和实现

插值

http://www.docin.com/p-256261745.html

输入输出:

得到一个函数,函数符合插值条件

一次插值:

interpr1(x0,y0,x,’method’)

栗子:

一段数据,不同方法插值

clear
x0 = [8,12,16,24,30,44,48,56,60]
y0 = [36,54,78,92,101,35,25,16,13]
x = [14,20]
xx = [8:0.1:60]
yl = interp1(x0,y0,x,’linear’) %分段线性
yc = interp1(x0,y0,x,’cubic’) %分段三次埃尔米特
ys = interp1(x0,y0,x,’spline’) %三次样条
xyl = interp1(x0,y0,xx,’linear’) %分段线性
xyc = interp1(x0,y0,xx,’cubic’) %分段三次埃尔米特
xys = interp1(x0,y0,xx,’spline’) %三次样条
plot(x0,y0,’*’,xx,xyl,’r’,xx,xyc,’k’,xx,xys,’g’)

二次插值

在MATLAB中,二维插值命令常用的有两个,

 1、一个是网格节点插值:

z=interp2(x0,y0,z0,x,y,’method’)

其中,

n z:被插值点处的函数值;

n x0,y0,z0:插值节点, x0,y0为向量,z0是矩阵,其列数等于x0的长度,行数等于y0的长度;

n x,y:被插值点;

n程序设计:

nclear

nx0=[1200:400:4000];

ny0=[1200:400:3600];

nz0=[1130 1250 1280 1230 1040 900 500 700;

n    1320 1450 1420 1400 1300 700 900 850;

n    1390 1500 1500 1400 900 1100 1060 950;

n    1500 1200 1100 1350 1450 1200 1150 1010;

n    1500 1200 1100 1550 1600 1550 1180 1070;

n    1500 1550 1600 1550 1600 1600 1600 1550;

n    1480 1500 1550 1510 1430 1300 1200 980];

nxi=1200:1:4000;            %加密数据点

nyi=1200:1:3600;

nzil=interp2(x0,y0,z0,xi’,yi,’linear’); %线性插值

nzic=interp2(x0,y0,z0,xi’,yi,’cubic’); %三次插值

nzis=interp2(x0,y0,z0,xi’,yi,’spline’); %样条插值

nsubplot(2,2,1)

nmesh(x0,y0,z0)

nsubplot(2,2,2)

nmesh(xi,yi,zil)

nsubplot(2,2,3)

nmesh(xi,yi,zic)

nsubplot(2,2,4)

nmesh(xi,yi,zis)

2、另一个是离散数据节点的插值命令:
z=griddata(x0,y0,z0,x,y,’method’)
其中,
z:被插值点处的函数值;
x0,y0,z0:插值节点, x0,y0,z0均为向量;
x,y:被插值点;
method:插值方法,包括:
‘linear’——线性插值;
‘cubic’ ——三次插值;

clear
x0=[129 140 103.5 88 185.5 195 105 157.5 107.5 77 81 162 162 117.5];
y0=[7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.5 84 -33.5];
z0=[-4 -8 -6 -8 -6 -8 -8 -9 -9 -8 -8 -9 -4 -9];
subplot(2,2,1)
plot(x0,y0,’+’); %作出测量点的分布图;
x=75:1:200; %加密
y=-50:1:150;
[x,y]=meshgrid(x,y);
z=griddata(x0,y0,z0,x,y,’cubic’);
subplot(2,2,2)
mesh(x,y,z), %用插值方法求出网格节点处的z坐标矩阵,绘制出三维图形
subplot(2,2,3)
meshc(x,y,z), %绘制等高线
subplot(2,2,4)
contour(x,y,z,[-5 -5]); %水深5英尺处海底曲面的等高线
grid on

拟合

   有时所给数据点的分布并不一定近似地呈一条直线,这时仍用直线拟合显然是不合适的,可用多项式拟合。对于给定的一组数据                          寻求次数不超过m (m<<N ) 的多项式

来拟合所给定的数据,与线性拟合类似,使偏差的平方和最小

多项式曲线拟合函数polyfit( )

调用格式:  p=polyfit(x,y,n)

       [p,s]= polyfit(x,y,n)

说明:x,y为数据点,n为多项式阶数,返回p为幂次从高到低的多项式系数向量p。矩阵s用于生成预测值的误差估计。

x=0:.1:1;

y=[.3 .5 1 1.4 1.6 1.9 .6 .4 .8 1.5 2]

n=3;

p=polyfit(x,y,n)

xi=linspace(0,1,100);

z=polyval(p,xi);

plot(x,y,’o’,xi,z,’k:’,x,y,’b’)

迭代

猜测是解方程的

所以用solve方法替代