【问题标题】:Interpolation with matlab用matlab插值
【发布时间】:2013-09-10 09:47:47
【问题描述】:

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

谢谢

【问题讨论】:

  • 我不明白:你想替换零还是有不同长度的向量?
  • 我想用其他值替换零,但以一种聪明的方式,所以当我做我的情节时,它会接近它应该是什么。
  • 但是插值也可以给你零......
  • 如果你只是跳过零值怎么办?
  • 如果你要对一个包含零的向量进行插值,尤其是一个接一个的插值,那么插值很可能也包含零。也许你可以解释一下为什么你想多做一点?

标签: matlab interpolation


【解决方案1】:

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

incld = y~=0;

然后在该子集上进行插值:

yn = interp1(x(incld),y(incld),x);

示例结果,绘制xy(绿色)和xyn(红色):

编辑

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

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

这是上面的二维版本,其中数组XY是对应于二维数组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 要求的解决方案...
  • @LuciusDomitiusAhenobarbus 我同意一般来说丢弃数据是不好的做法,因为一个人“不喜欢它”。在 OPs 案例中,采样似乎很稀疏,丢失的条目只是用零填充。如何进行插值成为一个相当重要的问题。
猜你喜欢
  • 2011-06-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多