在 y 轴上以对数刻度外推

Extrapolate in log scale on y axis

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]

interp1linear-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, x, 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');

第二个问题的简短回答是是!

更长的答案:替换我上面代码中的 xy,看看它是否有效(剧透:有效)

注意:我 运行 这段代码在 Octave Online 中,因为我没有本地 MATLAB 安装。不过应该不会对答案产生影响。