Matlab:如何插入非单调数据

时间:2014-05-29 14:28:23

标签: arrays matlab interpolation

我对一些不能单调的矢量的插值有疑问。

数据向量如下所示:

x =        x1 =       y =
   20.0000   21.6000     32
   21.8000   19.8000    132
   22.2000   18.0000    193
   21.4000   16.6000    351
   20.2000   17.0000    576
   20.6000   16.0000    649
   20.3000   13.4000    686
   19.4000   12.2000    806
   16.9000   11.4000   1117
   15.8000   11.2000   1252
   15.6000   10.9000   1281
   15.3000    9.7000   1379
   14.8000    9.2000   1527
   14.5000    8.7000   1577
   12.4000    7.2000   1943
   11.8000    5.0000   2047
   10.4000    3.0000   2282
    5.3000    2.1000   2840
    3.5000    2.0000   3047
    2.6000    1.8000   3140

(小部分)

我会链接到实现' y1'作为这些的插值使用:

y1 = interp1(x,y,x1);

但x和x1不是单调的。

y1应该与y

一样长

您知道如何进行插值吗?

2 个答案:

答案 0 :(得分:2)

对y和x进行排序,例如x是单调的。而不是排序x1并将其用于呈现。

查看以下代码是否有帮助。

[new_x,indx]=sort(x);
new_y=y(indx);
new_x1=sort(x1);

%solves duplicate entries through the unique function (1) or average entries (2)
[temp_new_x,indx]=unique(new_x);

% (1) discard all repeated x values except the last one
new_y=new_y(indx);
new_x=temp_new_x;

% (2) average repeated entries
new_y = arrayfun(@(C) mean(new_y(C==new_x)),temp_new_x);
new_x=temp_new_x;


y1=interp1(new_x,new_y,new_x1);

答案 1 :(得分:1)

对x数据进行排序并使用结果重新索引y数据,然后插值:

[sortedX, IX] = sort(x);
y1 = interp1(sortedX, y(IX), X1);