0

我有一个具有不同值的向量。有些值是零,有时它们甚至一个接一个。我需要将此向量与另一个具有相同大小的向量进行对比,但其中不能有零。我可以对我的向量进行某种插值的最佳方法是什么,我该怎么做?我试图阅读 mat-lab 中的插值,但我理解的不够好,无法实现它。如果可以逐步向我解释它,我将不胜感激,因为我是这个程序的新手。

谢谢

4

1 回答 1

5

从包含两个等长向量 的数据集开始xy其中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 版本,其中数组XY是对应于 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包含插值点。

在下图中,零由深蓝色补丁显示。左边是插值前,右边是插值后: 在此处输入图像描述

于 2013-09-10T10:07:03.413 回答