问题描述
x = [0,1,2,3,4,5,6,7] y = [0.07,0.05,0.03,0.02,0.01,0.005,0.002,0.0007]
我想找出当 y= 0.000001 时 x 是什么,我在下面尝试过,但它给了我错误的值。
10^(interp1(log10(y),x,10^-6,'linear','extrap'))
此外,如果我只有这样的两点,是否可以进行线性外推,
x = [6,7] y = [0.002,0.0007]
解决方法
interp1
的 linear-extrap
函数只是扩展了由点构成的分段线性拟合中的最后(或第一)段。它实际上并没有创建最小二乘拟合。这在下图中非常明显:
我是怎么得到这张图片的?我修复了您的代码的以下问题:
您正在插入 log10(y)
与 x
。
- 所以
interp1
的第三个参数必须是log10(new_y)
。对于new_y = 10^-6
,您实际上需要传递-6
。 - 拨打
interp1()
会给您new_x
。您将10
提高到interp1
的结果,这是错误的。
x = [0,1,2,3,4,5,6,7];
y = [0.07,0.05,0.03,0.02,0.01,0.005,0.002,0.0007]
logy = log10(y);
plot(logy,x,'-x');
new_y = 10^-6;
new_x = interp1(logy,log10(new_y),'linear','extrap')
plot(log10([new_y,y(end)]),[new_x,x(end)],'--r');
plot(log10(new_y),new_x,'or');
xlabel('log10(y)'); ylabel('x');
对您的第二个问题的简短回答是是的!。
更长的答案:替换上面代码中的 x
和 y
,看看它是否有效(剧透:确实如此)。
注意:我在 Octave Online 中运行此代码,因为我没有本地 MATLAB 安装。不过应该不会对答案产生影响。