符号学插值;从y得到x

时间:2019-06-20 21:49:13

标签: python numpy

我有以下数据:

x = [0, 2, 4, 8, 30]
y = [1.2e-3, 3.5e-4, 5.1e-5, 1.6e-5, 2e-7]

我正在尝试插值以从给定的x值获得y。

绘制后的数据如下:

import numpy as np
import matplotlib.pyplot as plt
fig, ax = plt.subplots(1)
ax.semilogy(x, y, 'o-')
plt.show()

plot

所以说我有兴趣找出x的值是3e-5的y值。

我可以通过以下方式获得给定y的x值:

z = np.linspace(0, 30, 10000)
logy = np.log10(y)
yy = np.power(10.0, np.interp(z, x, logy))
z[np.isclose(3.5e-5, yy, atol=1e-8)]

出局:

array([5.29852985])

但是如果我更改值以获取单个匹配项,还必须调整atol,并且还必须创建一个加载更多数据点以获取分辨率。

有没有更简单的方法来做到这一点?谢谢。

1 个答案:

答案 0 :(得分:0)

假设您要查找与x_f相对应的y_f。假设原始列表y中的条目严格按降序排列,而x中的条目按递增顺序,则发现y中的第一个条目小于或等于y_0。假设它是索引i上的那个,因此组成分段分区中相关线性函数的x,y元组将是(x [i-1],y [i-1])和( x [i],y [i])。 使用给定直线上两点的直线公式,我们可以得到x_f

x_f = x[i-1] + (x[i]-x[i-1])/(y[i]-y[i-1])*(y_f-y[i-1])