我有一个具有不同值的向量。有些值是零,有时它们甚至一个接一个。我需要将此向量与另一个具有相同大小的向量进行对比,但其中不能有零。我可以对我的向量进行某种插值的最佳方法是什么,我该怎么做?我试图阅读 mat-lab 中的插值,但我理解的不够好,无法实现它。如果可以逐步向我解释它,我将不胜感激,因为我是这个程序的新手。
谢谢
我有一个具有不同值的向量。有些值是零,有时它们甚至一个接一个。我需要将此向量与另一个具有相同大小的向量进行对比,但其中不能有零。我可以对我的向量进行某种插值的最佳方法是什么,我该怎么做?我试图阅读 mat-lab 中的插值,但我理解的不够好,无法实现它。如果可以逐步向我解释它,我将不胜感激,因为我是这个程序的新手。
谢谢
从包含两个等长向量 的数据集开始x
,y
其中y
要排除等于零的值,首先选择不包括零的子集:
incld = y~=0;
然后在该子集上进行插值:
yn = interp1(x(incld),y(incld),x);
x
示例结果,针对y
(绿色)和x
(红色)绘制yn
:
编辑
请注意,根据插值的定义,如果端点为零,则必须单独处理,例如在上述行之前运行以下代码:
if y(1)==0, y(1) = y(find(y~=0,1,'first'))/2; end
if y(end)==0, y(end) = y(find(y~=0,1,'last'))/2; end
编辑#2
这是上述的 2D 版本,其中数组X
和Y
是对应于 2D 数组中的条目的坐标Z
:
[nr nc]=size(Z);
[X Y] = meshgrid([1:nc],[1:nr]);
X2 = X;
Y2 = Y;
Z2 = Z;
excld = Z==0;
X2(excld) = [];
Y2(excld) = [];
Z2(excld) = [];
ZN = griddata(X2,Y2,Z2,X,Y);
ZN
包含插值点。
在下图中,零由深蓝色补丁显示。左边是插值前,右边是插值后: