我需要推断值
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,我只是发布了这个最小的示例,它产生了这样的符号翻转。
答案 0 :(得分:2)
这就是为什么最好使用 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'-平滑样条线(曲线)