MATLAB中如何对插值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MATLAB中如何对插值相关的知识,希望对你有一定的参考价值。

目前有三列数据,假设为X,Y,Z吧,前两列已经是递升的序列,分别是经纬度,第三列是海底深度。所测得数据是离散点,现在要求对数据进行处理,比如说插值,然后做成三维曲面图,目前的数据只能做成三维曲线图。要怎么做才可以啊。我需要详细的步骤,本人是MATLAb的初学者,还很不在行,希望有高手可以求救,小女子感激不尽啊。
[X,Y,Z]=griddata(x,y,z,linespace(-37.7893141,-37.78928)',linespace(49.6519737,49.6520603),'v4');

??? Undefined function or method 'linespace' for input arguments of type 'double'

要怎么修改才行呢?

...........
额,可以了,原来是打错了,应该是linspace.

参考技术A 在MATLAB中,一维多项式插值的方法通过命令interp1实现,其具体的调用格式如下:
插值的方法method参数的取值和对应的含义如下:
nearest:最邻近插值方法(nearest neighbor interpolation)。这种插值方法在已知数据的最邻近点设置插值点,对插值点的数值进行四舍五入,对超出范围的数据点返回NaN。
linear:线性插值(linear interpolation),这是interp1命令中method的默认数值。该方法采用直线将相邻的数据点相连,对超出数据范围的数据点返回NaN。
spline:三次样条插值(cubic spline interpolation),该方法采用三次样条函数获取插值数据点,在已知点为端点的情况下,插值函数至少具有相同的一阶和二阶导数。
pchip:分段三次厄米多项式差值(piecewise cubic Hermite interpolation)。
cubic:三次多项式插值,与分段三次厄米多项式插值方法相同。
v5cubic:MATLAB5中使用的三次多项式插值。
参考技术B 见贴
http://zhidao.baidu.com/question/175906491.html#here
A=[1.486,3.059,0.1;2.121,4.041,0.1;2.570,3.959,0.1;3.439,4.396,0.1;
4.505,3.012,0.1;3.402,1.604,0.1;2.570,2.065,0.1;2.150,1.970,0.1;
1.794,3.059,0.2;2.121,3.615,0.2;2.570,3.473,0.2;3.421,4.160,0.2;
4.271,3.036,0.2;3.411,1.876,0.2;2.561,2.562,0.2;2.179,2.420,0.2;
2.757,3.024,0.3;3.439,3.970,0.3;4.084,3.036,0.3;3.402,2.077,0.3;
2.879,3.036,0.4;3.421,3.793,0.4;3.953,3.036,0.4;3.402,2.219,0.4;
3.000,3.047,0.5;3.430,3.639,0.5;3.822,3.012,0.5;3.411,2.385,0.5;
3.103,3.012,0.6;3.430,3.462,0.6;3.710,3.036,0.6;3.402,2.562,0.6;
3.224,3.047,0.7;3.411,3.260,0.7;3.542,3.024,0.7;3.393,2.763,0.7];
x=A(:,1);y=A(:,2);z=A(:,3);
scatter(x,y,5,z)%散点图
figure
[X,Y,Z]=griddata(x,y,z,linspace(1.486,4.271)',linspace(1.604,4.276),'v4');%插值
pcolor(X,Y,Z);shading interp%伪彩色图
figure,contourf(X,Y,Z) %等高线图
figure,surf(X,Y,Z)%三维曲面本回答被提问者采纳
参考技术C [X,Y] = meshgrid(-3:.25:3);
Z = peaks(X,Y);
[XI,YI] = meshgrid(-3:.125:3);
ZI = interp2(X,Y,Z,XI,YI);
mesh(X,Y,Z)
mesh(XI,YI,ZI)%这句话就导出了插入的点
参考技术D 只为做任务

matlab插值函数

 插值

x=0:2*pi;
y=sin(x);
xx=0:0.5:2*pi;

%interp1对sin函数进行分段线性插值,调用interp1的时候,默认的是分段线性插值
y1=interp1(x,y,xx);
figure
plot(x,y,'o',xx,y1,'r')
title('分段线性插值')

%临近插值
y2=interp1(x,y,xx,'nearest');
figure
plot(x,y,'o',xx,y2,'r');
title('临近插值')

%球面线性插值
y3=interp1(x,y,xx,'spline');
figure
plot(x,y,'o',xx,y3,'r')
title('球面插值')

%三次多项式插值法
y4=interp1(x,y,xx,'cubic');
figure
plot(x,y,'o',xx,y4,'r');
title('三次多项式插值')

方法

说明

连续性

注释

'linear'

线性插值。在查询点插入的值基于各维中邻点网格点处数值的线性插值。这是默认插值方法。

C0

 

  • 需要至少 2 个点。

  • 比最近邻点插值需要更多内存和计算时间。

 

'nearest'

最近邻点插值。在查询点插入的值是距样本网格点最近的值。

不连续

 

  • 需要至少 2 个点。

  • 最低内存要求

  • 最快计算时间

 

'next'

下一个邻点插值。在查询点插入的值是下一个抽样网格点的值。

不连续

 

  • 需要至少 2 个点。

  • 内存要求和计算时间与 'nearest' 相同

 

'previous'

上一个邻点插值。在查询点插入的值是上一个抽样网格点的值。

不连续

 

  • 需要至少 2 个点。

  • 内存要求和计算时间与 'nearest' 相同

 

'pchip'

保形分段三次插值。在查询点插入的值基于邻点网格点处数值的保形分段三次插值。

C1

 

  • 需要至少 4 个点。

  • 比 'linear' 需要更多内存和计算时间

 

'cubic'

用于 MATLAB® 5 的三次卷积。

C1

 

  • 需要至少 3 个点。

  • 点必须均匀间隔

  • 对于不规则间隔的数据,此方法会回退到 'spline' 插值

  • 内存要求和计算时间与 'pchip' 相似

 

'v5cubic'

与 'cubic' 相同。

C1

'makima'

修正 Akima 三次 Hermite 插值。在查询点插入的值基于次数最大为 3 的多项式的分段函数。为防过冲,已修正 Akima 公式。

C1

 

  • 需要至少 2 个点。

  • 产生的波动比 'spline' 小,但不像 'pchip' 那样急剧变平

  • 计算成本高于 'pchip',但通常低于 'spline'

  • 内存要求与 'spline' 类似

 

'spline'

使用非结终止条件的样条插值。在查询点插入的值基于各维中邻点网格点处数值的三次插值。

C2

 

  • 需要至少 4 个点。

  • 比 'pchip' 需要更多内存和计算时间

以上是关于MATLAB中如何对插值的主要内容,如果未能解决你的问题,请参考以下文章

matlab中如何对一个矩阵扩展下啊?

如何在matlab中用样条函数平滑曲线

如何利用matlab实现多种插值

如何使用 Matlab 通过最近邻插值旋转图像

Matlab中插值函数怎么用

matlab 如何用插值给NAN赋值