插值数据函数实例讲解学习
一、interp1:
格式:yi=interp1(x,y,xi,'method')
例:给出x,y等不同的数据,求出对应xi的yi。
x y 0 0.39849 0.1 0.39695 0.195 0.39142 0.3 0.38138 0.401 0.36812 0.5 0.35206 1,yi=interp1(x,y,xi)
yi=interp1(x,y,xi)是简单的线性插值,即将(x,y)对应的点一一与图形上的位子对应起
来,然后连接各自对应点,yi即xi的所对应的点,本例题令xi=0.35,求出yi=0.3748。 一维数据插值 1
0.40.3950.390.3850.380.3750.370.3650.360.3550.3500.050.10.150.20.250.30.350.40.450.5
2,用指定算法计算插值。yi=interp1(x,y,xi,'method'):
(1)‘nearest’:最近邻点插值,直接完成计算;即xi最靠近给定的x的最近的点x0,即yiy0。
同样选取xi=0.35,得yiy0.30.3814
插值数据函数实例讲解学习
一维数据插值 2
0.40.3950.390.3850.380.3750.370.3650.360.3550.3500.050.10.150.20.250.30.350.40.450.5
(2)‘linear’:线性插值(缺省方式),直接完成计算;此与1相同,
(3)‘spline’:三次样条函数插值。即针对每个相邻两个(xi,yi)分别建立不同三次多项式,
fi(x)a0a1xa2x2a3x3
且要求每个节点上连续,即
f(xi0)f(xi0)f'(xi0)f'(xi0) f''(x0)f''(x0)ii关于三次样条函数这里不细描述,(文章最后有关于三次样条函数的具体讲解)会用即可。 选取xi=0.35,得yi=0.3752 一维数据插值 3
0.40.3950.390.3850.380.3750.370.3650.360.3550.3500.050.10.150.20.250.30.350.40.450.5
插值数据函数实例讲解学习
(4)‘pchip’:分段三次Hermite 插值。 同样需满足
f(xi0)f(xi0)f'(xi0)f'(xi0) f''(x0)f''(x0)ii但其根据节点建立的函数为:
F(x)fi[(xix)(2aiyiyi')yi]i1nxxjfij1xixjn2ai1j1xixjn
该方法保留单调性与数据的外形;
一维数据插值 4
0.40.3950.390.3850.380.3750.370.3650.360.3550.3500.050.10.150.20.250.30.350.40.450.5
(5)‘cubic’:与’pchip’操作相同;cubic是立方插值,而spline是三次样条插值。spline的要求要比cubic的要求更高一点,效果也更好一点。 (6)‘v5cubic’:在MATLAB 5.0 中的三次插值。(我不会)
二、interp2:
格式:zi=interp2(x,y,z,xi,yi,method)
例: 在一丘陵地带测量高程,x和 y 方向每隔100米测一个点,得高程如表1,试插 值一曲面,确定合适的模型。
表格 1
yx 100 200 300 100 636 698 680 200 697 712 674 300 624 630 598 400 478 478 412 500 450 420 400 插值数据函数实例讲解学习
400 662 626 552 334 310 1,zi=interp2(x,y,z,xi,yi):
与yi=interp1(x,y,xi)一样的原理,只不过是将二维运算换成三维运算而已,都是线性运算。选取xi150,yi150,得zi685.7500。
二维数据插值 1
800700600500400300400300200200100100300500400
2,用指定算法计算插值。
zi=interp2(x,y,z,xi,yi,method)
(1)linear:双线性插值算法(缺省算法),与1想同。
(2)nearest:最临近插值;与一,2,(1)原理相同,选取xi150,yi150,得
z(150,150)z(200,200)712
二维数据插值 2
插值数据函数实例讲解学习
800700600500400300400300200200100100300500400
(3)spline:三次样条插值;与一,2,(3)原理相同,选取xi150,yi150,得z(150=713.5273
二维数据插值 3
,150)800700600500400300200400300200200100100300500400
(4)cubic:双三次插值(立方插值)。与一,2,(3)原理相同,选取xi150,yi150,得z(150,150)=708.2500
二维数据插值 4
插值数据函数实例讲解学习
800700600500400300200400300200200100100300500400
三、lagrane插值法
例:根据给出x,y等不同的数据,用lagrane插值法求出对应xi的yi。
x y lagrane插值多项式表示
2 0 4 3 n6 5 8 4 10 1 F(x)yili(x)i0(xx0)...(xxi1)(xxi1)...(xxn)li(x)(xix0)...(xixi1)(xixi1)...(xixn)令xi=3,求出yi=1.3828。 lagrange插值
6543210
2345678910
插值数据函数实例讲解学习
四、newton(牛顿)插值法
例题,我们就用与拉格朗日插值法相同的例题。 newton(牛顿)插值法函数表示为:
f[x0,x1]f(x0)f(x1)f[x0,x1]f[x1,x2],f[x0,x1,x2]x0x1x0x1f[x0,x1,,xn1]f[x1,x2,,xn]x0x1
f[x0,x1,,xn]F(x)f(x0)f[x0,x1](xx0)f[x0,x1,,xn](xx0)(xxn)令xi=3,求出yi=1.3828。
newton插值
65432102345678910matlab代码:
一维数据插值 1
x=[0.0 0.1 0.195 0.3 0.401 0.5];
y=[0.39849 0.39695 0.39142 0.38138 0.36812 0.35206]; yi=interp1(x,y,0.35) plot(x,y,'-kd') hold on
plot(0.35,yi,'o')
一维数据插值 2
x=[0.0 0.1 0.195 0.3 0.401 0.5];
y=[0.39849 0.39695 0.39142 0.38138 0.36812 0.35206]; yi=interp1(x,y,0.35,'nearest')
插值数据函数实例讲解学习
plot(x,y,'-kd') hold on
plot(0.35,yi,'kd')
一维数据插值 3
x=[0.0 0.1 0.195 0.3 0.401 0.5];
y=[0.39849 0.39695 0.39142 0.38138 0.36812 0.35206]; xi=0:0.001:0.5; x1=0.35;
yi=interp1(x,y,xi,'spline'); y1=interp1(x,y,x1,'spline') plot(x,y,'o',xi,yi,'-k') hold on plot(x1,y1,'rd'
一维数据插值 4
x=[0.0 0.1 0.195 0.3 0.401 0.5];
y=[0.39849 0.39695 0.39142 0.38138 0.36812 0.35206]; xi=0:0.001:0.5; x1=0.35;
yi=interp1(x,y,xi,'pchip'); y1=interp1(x,y,x1,'pchip')
plot(x,y,'o',x1,y1,'rd',xi,yi,'-k')
二维数据插值1
x=100:100:500; y=100:100:400;
z=[636 697 624 478 450 698 712 630 478 420 680 674 598 412 400 662 626 552 334 310]; zi=interp2(x,y,z,150,150) mesh(x,y,z) hold on
plot3(150,150,zi,'rd')
二维数据插值 2
clc clear
[x,y]=meshgrid(100:100:500,100:100:400); z=[636 697 624 478 450 698 712 630 478 420 680 674 598 412 400 662 626 552 334 310]; xi=150; yi=150;
zi=interp2(x,y,z,xi,yi,'neareat') mesh(x,y,z)
插值数据函数实例讲解学习
hold on
plot3(xi,yi,zi,'kd')
二维数据插值3
[x,y]=meshgrid(100:100:500,100:100:400); z=[636 697 624 478 450 698 712 630 478 420 680 674 598 412 400 662 626 552 334 310]; [xi,yi]=meshgrid(100:10:500,100:10:400); x1=150; y1=150;
zi=interp2(x,y,z,xi,yi,'spline'); z1=interp2(x,y,z,x1,y1,'spline'); mesh(xi,yi,zi); hold on
plot3(x,y,z,'bo'); hold on
plot3(x1,y1,z1,'kd');
lagrange插值
x=[2,4,6,8,10]; y=[0,3,5,4,1]; xi=[2:0.1:10]; n=length(xi); for i=1:n z=xi(i); s=0.0; for k=1:5 m=1.0; for j=1:5 if j~=k
m=m*(z-x(j))/(x(k)-x(j)); end end
s=m*y(k)+s; end yi(i)=s; end
q=find(xi==3) x1=xi(q),y1=yi(q) plot(xi,yi,x1,y1,'kd')
newton插值
x=[2,4,6,8,10]; y=[0,3,5,4,1]; xi=[2:0.1:10];
插值数据函数实例讲解学习
q=length(xi); for j=1:q p=xi(j); n=length(x); m=length(y); Y=zeros(n); Y(:,1)=y'; for k=1:n-1 for i=1:n-k
Y(i,k+1)=(Y(i+1,k)-Y(i,k))/(x(i+k)-x(i)); end end g=0; for i=1:n z=1; for k=1:i-1 z=z*(p-x(k)); end
g=g+Y(1,i)*z; end yi(j)=g end
h=find(xi==3); x1=xi(h);y1=yi(h); plot(xi,yi,x1,y1,'rd')
因篇幅问题不能全部显示,请点此查看更多更全内容