在 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]
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, 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');
第二个问题的简短回答是是!。
更长的答案:替换我上面代码中的 x
和 y
,看看它是否有效(剧透:有效)。
注意:我 运行 这段代码在 Octave Online 中,因为我没有本地 MATLAB 安装。不过应该不会对答案产生影响。
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, 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');
第二个问题的简短回答是是!。
更长的答案:替换我上面代码中的 x
和 y
,看看它是否有效(剧透:有效)。
注意:我 运行 这段代码在 Octave Online 中,因为我没有本地 MATLAB 安装。不过应该不会对答案产生影响。