修改了缺失数据的线性插值

时间:2012-08-22 08:58:25

标签: matlab interpolation nan linear-interpolation

想象一组数据具有给定的x值(作为列向量)和几个组合在矩阵中的y值(列向量的行向量)。矩阵中的某些值不可用:

%% Create the test data
N = 1e2; % Number of x-values

x = 2*sort(rand(N, 1))-1;
Y = [x.^2, x.^3, x.^4, x.^5, x.^6]; % Example values
Y(50:80, 4) = NaN(31, 1); % Some values are not avaiable

现在我有一个用于插值的新x值的列向量。

K = 1e2; % Number of interplolation values
x_i = rand(K, 1);

我的目标是找到一种快速方法来插入给定x_i值的所有y值。如果y值中有NaN值,我想使用缺失数据之前的y值。在示例中,这将是Y(49, :)中的数据。

如果我使用interp1,我会获得NaN值,并且对于大xx_i执行速度很慢:

starttime = cputime;
Y_i1 = interp1(x, Y, x_i);
executiontime1 = cputime - starttime

替代方案是interp1q,大约快两倍。

什么是允许我修改的非常快捷的方式?

可能的想法:

  1. Y_i1进行后处理以消除NaN - 值。
  2. 使用循环和find - 命令的组合来始终使用邻居而不进行插值。

1 个答案:

答案 0 :(得分:1)

interp1与样条插值(spline)一起使用会忽略NaN。