【问题标题】:Matlab:how to interpolate non motonic dataMatlab:如何插入非单调数据
【发布时间】:2014-05-29 14:28:23
【问题描述】:

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

数据向量如下:

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 一样长

您知道如何执行插值吗?

【问题讨论】:

    标签: arrays matlab interpolation


    【解决方案1】:

    对 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);
    

    【讨论】:

    • 感谢您的回答。我使用了您的代码,但遇到了两个问题:第一个问题是 plot(x,y,x1,y1,'ro-');插值不匹配但不存在非单调误差。第二个问题是完整的数据。如果我使用我所有的数据向量(那些超过 20 的只是长的)返回非单调的问题,也许是因为可能有一些重复。
    • 关于第一个问题是因为您无法绘制原始 x1。 y1 与 new_x1 而不是 x1 链接。因此你应该有情节(x,y,new_x1,y1,'ro-')。您可以跳过 x1 并将 x1 直接提供给 interp1,我只是为了一致性而添加了这个。关于第二个问题,检查你是否真的有重复,如果有,是在 x 还是 x1 中?
    • 好的,我解决了“情节问题”,尽管有一小段时间有些点不匹配。关于第二个问题,我在 x 和 x1 中都有重复
    • @Mixo 查看unique 以解决“重复”错误。
    • @Divakar 可能不像使用 unique 那样简单。关于 x1 重复并不重要,因为它们不会影响 interp1。但是,在 x 中它是重要且唯一的不是解决方案。 Mixo 你是如何获得这些数据的?你怎么能在 x 中有重复的数据?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2014-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      相关资源
      最近更新 更多