在 y 轴上以对数刻度外推

问题描述

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 函数只是扩展了由点构成的分段线性拟合中的最后(或第一)段。它实际上并没有创建最小二乘拟合。这在下图中非常明显:

enter image description here

我是怎么得到这张图片的?我修复了您的代码的以下问题: 您正在插入 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');

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

更长的答案:替换上面代码中的 xy,看看它是否有效(剧透:确实如此)enter image description here

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...