Matlab外推符号翻转

时间:2019-01-01 10:23:31

标签: matlab interpolation extrapolation

我需要推断值

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,我只是发布了这个最小的示例,它产生了这样的符号翻转。

1 个答案:

答案 0 :(得分:2)

您的数据看起来像“步骤” enter image description here

这就是为什么最好使用 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'-平滑样条线(曲线)