用matlab实现插值

用matlab实现插值,matlab,interpolation,Matlab,Interpolation,我有一个不同值的向量。 有些值是零,有时甚至一个接一个地出现。 我需要把这个向量和另一个同样大小的向量画出来,但里面不能有零。 我能对向量做某种插值的最好方法是什么?我该怎么做? 我试着在mat lab中阅读有关插值的内容,但我理解得不够好,无法实现它。 如果有可能一步一步地向我解释,我将非常感激,因为我是这个项目的新手 感谢从包含两个等长向量的数据集开始,x,y,其中要排除y等于零的值,首先选择不包括零的子集: incld = y~=0; 然后在该子集上插值: yn = interp1(x(

我有一个不同值的向量。 有些值是零,有时甚至一个接一个地出现。 我需要把这个向量和另一个同样大小的向量画出来,但里面不能有零。 我能对向量做某种插值的最好方法是什么?我该怎么做? 我试着在mat lab中阅读有关插值的内容,但我理解得不够好,无法实现它。 如果有可能一步一步地向我解释,我将非常感激,因为我是这个项目的新手


感谢

从包含两个等长向量的数据集开始,
x
y
,其中要排除
y
等于零的值,首先选择不包括零的子集:

incld = y~=0;
然后在该子集上插值:

yn = interp1(x(incld),y(incld),x);
示例结果,根据
y
(绿色)绘制
x
,根据
yn
(红色)绘制
x

编辑

请注意,根据插值的定义,如果端点为零,则必须单独处理,例如,在上面的行之前运行以下命令:

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
包含插值点

在下图中,零由深蓝色面片显示。左为插值前,右为插值后:

从包含两个等长向量的数据集开始,
x
y
,其中要排除
y
等于零的值,首先选择不包括零的子集:

incld = y~=0;
然后在该子集上插值:

yn = interp1(x(incld),y(incld),x);
示例结果,根据
y
(绿色)绘制
x
,根据
yn
(红色)绘制
x

编辑

请注意,根据插值的定义,如果端点为零,则必须单独处理,例如,在上面的行之前运行以下命令:

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
包含插值点

在下图中,零由深蓝色面片显示。左为插值前,右为插值后:

我不明白:你想替换零还是有不同长度的向量?我想用其他值替换零,但要用一种聪明的方式,这样当我绘制时,它将接近它应该的样子。但是插值也可以给你零……如果你跳过零值呢?如果你要插值呢一个包含零的向量,尤其是一个接一个的向量,很可能插值也包含零。也许你可以解释一下为什么你想做得更多一点?我不明白:你想替换零还是有不同长度的向量?我想用其他值替换零,但是用一种聪明的方式,所以当我做绘图时,它将接近它应该是什么。但是插值也可以给你零…如果你愿意呢跳过零值?如果你要插值一个包含零的向量,尤其是一个接一个的向量,插值很可能也包含零。也许你可以解释一下为什么你想做得更多一点?应该提到的是,这会以一种非常沉重的方式操纵数据。如果这是某种强度测量,它可能会给你一个完全错误的结果!应该将零设置为接近零,而不是插值。但是,这就是OP所要求的解决方案…@Luciusdomitiusahenobus我同意,一般来说,丢弃数据是不好的做法,因为人们“不喜欢它”。在OPs的情况下,似乎采样是稀疏的,丢失的条目只是用零填充。如何插值成为一个相当重要的问题。应该提到的是,这会以非常沉重的方式操纵数据。如果这是某种强度测量,它可能会给你一个完全错误的结果!应该将零设置为接近零,而不是插值。但是,这就是OP所要求的解决方案…@Luciusdomitiusahenobus我同意,一般来说,丢弃数据是不好的做法,因为人们“不喜欢它”。在OPs的情况下,似乎采样是稀疏的,丢失的条目只是用零填充。如何插值成为一个相当重要的问题。