Matlab之插值
2015-07-29 16:43
549 查看
Matlab中有5种基本的插值方法:
nearest:最近邻插值法(平面立体均适用)
linear:线性插值法(interp1默认的插值方法)[b](平面立体均适用)[/b]
spline:三次样条插值法[b](平面立体均适用)[/b]
pchip:分段三次厄米多项式插值法[b](只适用于平面)[/b]
cubic:三次多项式插值法[b](平面立体均适用)[/b]
平面插值:
Matlab中的平面插值函数为interp1:
[plain] view
plaincopy
t=1900:10:1990;
p=[75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505 249.633];
x=1900:1990;
y1=interp1(t, p, x); %默认为linear
y2=interp1(t, p, x, 'nearest');
y3=interp1(t, p, x, 'spline');
y4=interp1(t, p, x, 'pchip');
y5=interp1(t, p, x, 'cubic');
subplot(2, 3, 1);
plot(x, y1, t, p, 'ro');
title('linear');
subplot(2, 3, 2);
plot(x, y2, t, p, 'ro');
title('nearest');
subplot(2, 3, 3);
plot(x, y3, t, p, 'ro');
title('spline');
subplot(2, 3, 4);
plot(x, y4, t, p, 'ro');
title('pchip');
subplot(2, 3, 5);
plot(x, y5, t, p, 'ro');
title('cubic');
注意:interp1(t, p, x)中的(t, p)是对应的精确坐标,x是需要插值的横坐标,返回的是插值后的纵坐标
[plain] view
plaincopy
disp(' year linear nearest spline pchip cubic ');
for i=10:20
k(i-9, 1) = 1900+i;
k(i-9, 2) = y1(i+1);
k(i-9, 3) = y2(i+1);
k(i-9, 4) = y3(i+1);
k(i-9, 5) = y4(i+1);
k(i-9, 6) = y5(i+1);
end
disp(round(k)); %取整
结果如下:
三维插值:
Matlab中的三维插值函数为interp2:
注意:interp2(x, y, z, x1, y1, method)中的(x, y, z)是对应的精确坐标,x1是需要插值的x坐标,y1是需要插值的y坐标,method可以省略,表示那5种插值方法。返回的是插值后的z坐标
对
进行插值:
[plain] view
plaincopy
x=-3*pi:0.5*pi:3*pi;
y=x;
[X, Y] = meshgrid(x, y);
Z=sin(sqrt(X.^2 + Y.^2))./sqrt(X.^2 + Y.^2);
subplot(2, 3, 1);
mesh(X, Y, Z);
title('origin');
x=-3*pi:0.1*pi:3*pi;
y=x;
[X1, Y1] = meshgrid(x, y);
Z1=interp2(X, Y, Z, X1, Y1); %默认用linear法拟合
subplot(2, 3, 2);
mesh(X1, Y1, Z1);
title('linear');
Z2=interp2(X, Y, Z, X1, Y1, 'nearest');
subplot(2, 3, 3);
mesh(X1, Y1, Z2);
title('nearest');
Z3=interp2(X, Y, Z, X1, Y1, 'spline');
subplot(2, 3, 4);
mesh(X1, Y1, Z3);
title('spline');
Z4=interp2(X, Y, Z, X1, Y1, 'cubic');
subplot(2, 3, 5);
mesh(X1, Y1, Z4);
title('cubic');
除了interp1和interp2插值函数外,Matlab还提供了另外几个插值函数:
1:三次样条插值
2:牛顿插值(多项式插值)
3:切比雪夫插值(Chebyshev)
三次样条插值:
Y=spline(x, y, X)
其中(x, y)是精确点的坐标,X是要插值的x坐标,返回的Y是插值求出的y坐标
[plain] view
plaincopy
x=1:5;
y=[1 3 4 3 4];
X=0:0.1:6;
Y=spline(x, y, X);
plot(X, Y, x, y, 'ro');
如图:
nearest:最近邻插值法(平面立体均适用)
linear:线性插值法(interp1默认的插值方法)[b](平面立体均适用)[/b]
spline:三次样条插值法[b](平面立体均适用)[/b]
pchip:分段三次厄米多项式插值法[b](只适用于平面)[/b]
cubic:三次多项式插值法[b](平面立体均适用)[/b]
平面插值:
Matlab中的平面插值函数为interp1:
[plain] view
plaincopy
t=1900:10:1990;
p=[75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505 249.633];
x=1900:1990;
y1=interp1(t, p, x); %默认为linear
y2=interp1(t, p, x, 'nearest');
y3=interp1(t, p, x, 'spline');
y4=interp1(t, p, x, 'pchip');
y5=interp1(t, p, x, 'cubic');
subplot(2, 3, 1);
plot(x, y1, t, p, 'ro');
title('linear');
subplot(2, 3, 2);
plot(x, y2, t, p, 'ro');
title('nearest');
subplot(2, 3, 3);
plot(x, y3, t, p, 'ro');
title('spline');
subplot(2, 3, 4);
plot(x, y4, t, p, 'ro');
title('pchip');
subplot(2, 3, 5);
plot(x, y5, t, p, 'ro');
title('cubic');
注意:interp1(t, p, x)中的(t, p)是对应的精确坐标,x是需要插值的横坐标,返回的是插值后的纵坐标
[plain] view
plaincopy
disp(' year linear nearest spline pchip cubic ');
for i=10:20
k(i-9, 1) = 1900+i;
k(i-9, 2) = y1(i+1);
k(i-9, 3) = y2(i+1);
k(i-9, 4) = y3(i+1);
k(i-9, 5) = y4(i+1);
k(i-9, 6) = y5(i+1);
end
disp(round(k)); %取整
结果如下:
三维插值:
Matlab中的三维插值函数为interp2:
注意:interp2(x, y, z, x1, y1, method)中的(x, y, z)是对应的精确坐标,x1是需要插值的x坐标,y1是需要插值的y坐标,method可以省略,表示那5种插值方法。返回的是插值后的z坐标
对
进行插值:
[plain] view
plaincopy
x=-3*pi:0.5*pi:3*pi;
y=x;
[X, Y] = meshgrid(x, y);
Z=sin(sqrt(X.^2 + Y.^2))./sqrt(X.^2 + Y.^2);
subplot(2, 3, 1);
mesh(X, Y, Z);
title('origin');
x=-3*pi:0.1*pi:3*pi;
y=x;
[X1, Y1] = meshgrid(x, y);
Z1=interp2(X, Y, Z, X1, Y1); %默认用linear法拟合
subplot(2, 3, 2);
mesh(X1, Y1, Z1);
title('linear');
Z2=interp2(X, Y, Z, X1, Y1, 'nearest');
subplot(2, 3, 3);
mesh(X1, Y1, Z2);
title('nearest');
Z3=interp2(X, Y, Z, X1, Y1, 'spline');
subplot(2, 3, 4);
mesh(X1, Y1, Z3);
title('spline');
Z4=interp2(X, Y, Z, X1, Y1, 'cubic');
subplot(2, 3, 5);
mesh(X1, Y1, Z4);
title('cubic');
除了interp1和interp2插值函数外,Matlab还提供了另外几个插值函数:
1:三次样条插值
2:牛顿插值(多项式插值)
3:切比雪夫插值(Chebyshev)
三次样条插值:
Y=spline(x, y, X)
其中(x, y)是精确点的坐标,X是要插值的x坐标,返回的Y是插值求出的y坐标
[plain] view
plaincopy
x=1:5;
y=[1 3 4 3 4];
X=0:0.1:6;
Y=spline(x, y, X);
plot(X, Y, x, y, 'ro');
如图:
相关文章推荐
- 模式识别 - 处理多个演示样本研究(MIL)特点(matlab)
- matab程序转换为.exe可执行文件方法
- matlab 多元回归分析 regress、 nlinfit 、stepwise函数
- Matlab--概率密度函数
- Windows下编译Caffe并编译Matlab接口
- matlab统计一个数组中各元素出现的频数、频率
- Matlab 自相关检测 :自相关函数xcorr
- Intel® MKL with Numpy, Scipy, Matlab, C#, Python, NAG and more
- 在matlab中进行地理坐标和像素坐标的相互转换
- Python 之 h5py 读取 matlab 中 .mat 文件 cell 方法浅析
- Matlab实现求a到b被c整除的个数
- MATLAB中从.fig文件导出数据
- Matlab--函数极值最值零点
- Matlab--积分微分
- ADC测试matlab代码
- matlab的滤波器仿真——低通滤波器与插值滤波器
- Matlab--极限
- Matlab--多项式
- 【算法学习】【图像增强】【Retinex】White Patch Retinex 程序解读
- matlab更改默认路径