【问题标题】:Matlab Extrapolation Sign FlipMatlab 外推符号翻转
【发布时间】:2019-01-01 10:23:31
【问题描述】:

我需要推断值

values = [4.7725677013567795e-25,5.259671597595681e-25,5.271571307092517e-25,5.804522928756955e-25,5.817596178596506e-25,6.400225475961127e-25,6.414575757297374e-25,7.05099062804588e-25,7.066729446412066e-25];

当我跑步时

x = [1:9];
valuesextra = interp1(x,values,[10:3120],'spline','extrap');

首先,外推值变小,而它们应该变大,其次接收值的符号在第一个值之后翻转,我得到

4.34358964678642e-25    -3.23663133644058e-25   -1.77921360688784e-24   -4.14411271161367e-24 ...

我已经对相似的数据集进行了类似的推断,我收到了正确的推断。这里有什么问题?顺便说一句:数据集实际上是 450 长而不是 9,我刚刚发布了这个最小的例子,它产生了这样一个标志的翻转。

【问题讨论】:

    标签: matlab interpolation extrapolation


    【解决方案1】:

    您的数据看起来像“步骤”

    这就是为什么可以更好地使用 fit 函数而不是 interp1

    代码如下:

    values = [4.7725677013567795e-25,5.259671597595681e-25,5.271571307092517e-25,5.804522928756955e-25,5.817596178596506e-25,6.400225475961127e-25,6.414575757297374e-25,7.05099062804588e-25,7.066729446412066e-25]';
    x = (1:9)';
    figure();
    subplot(2,1,1)
    plot(x,values,'.b',x,values,'-g')
    hold all;
    
    f = fit(x, values, 'poly1');
    plot(f)
    
    xx = (10:3120);
    yy = f.p1*xx + f.p2;
    subplot(2,1,2)
    plot(x,values,'.b',x,values,'-g');
    hold all;
    plot(xx,yy,'.k',xx,yy,'--r')
    

    您可以选择其他拟合函数,查看fit的帮助,适当调整yy函数

    'cubicinterp' - 分段三次插值

    'smoothingspline' - 平滑样条(曲线)

    【讨论】:

      猜你喜欢
      • 2016-01-06
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 2017-06-14
      • 1970-01-01
      相关资源
      最近更新 更多