-3

谁能帮助我应该如何在 MATLAB 上对以下数据使用 interp1-function:

   -99
     3
     1
     7
    10
    10
    22
    29
   -99
   -99
    25
    26
    60
   142
    78
   124
    74
    26
    13
    18

-99 数据值对应于错误值,我想对它们进行插值...建议?=) 谢谢!

4

2 回答 2

1

目前不在 Matlab 周围,但我认为您可以执行以下操作:

    Y =  [-99
         3
         1
         7
        10
        10
        22
        29
       -99
       -99
        25
        26
        60
       142
        78
       124
        74
        26
        13
        18];

%Make an array of x values - I'm assuming yours are evenly spaced
Xi = 1:length(Y);

%remove the -99 points
errors = Y == -99;
X = Xi(~errors);
Y = Y(~errors);

Yi = interp1(X, Y, Xi);

所以在代码中 X 和 Y 是你想要插值的点的 x 和 y 坐标向量,即你的输入点(没有错误!),而 Xi 是你想要插值的点的位置的向量值对于(如果您认为 X 是位置,Y 是值)。点 Yi 将是对应于 Xi 的插值,我认为在这种情况下它将是你的原始向量,其中 -99 点被线性插值替换。有趣的事情可能会发生在边缘:/检查文档。希望没有错误。

于 2013-01-08T12:58:32.723 回答
1

假设您的数组是a.

x = find(a ~= -99);
y = a(x);
xi = 1:length(a);
yi =  interp1(x, y, xi);

yi就是你要找的。

于 2013-01-08T13:01:03.900 回答