识别 y = 0 的曲线的交点
在使用 NumPy 数组进行 Python 绘图的上下文中,曲线与 y = 0 相交的 y 轴可能是一项难以捉摸的任务。本文讨论了一种准确确定这些交点的方法,解决了现有寻根技术的局限性。
首先,让我们使用 NumPy 数组定义我们的绘图:
<code class="python">import numpy as np import matplotlib.pyplot as plt vertical_data = ... gradient = ... plt.plot(gradient, vertical_data) plt.show()</code>
现在,假设我们想要找到曲线的零值。由于浮点精度限制,传统的求根算法通常提供不精确的结果。为了克服这个问题,我们采用了一种简单的线性插值技术:
<code class="python">import numpy as np def find_roots(x, y): # Compute the sign differences s = np.abs(np.diff(np.sign(y))).astype(bool) # Perform linear interpolation at sign changes return x[:-1][s] + np.diff(x)[s]/(np.abs(y[1:][s]/y[:-1][s])+1)</code>
该函数将 x 和 y 数组作为输入,并找到 y 值与零标记交叉的交点。我们将此函数应用于我们的数据并绘制结果:
<code class="python">z = find_roots(gradient, vertical_data) plt.plot(gradient, vertical_data) plt.plot(z, np.zeros(len(z)), marker="o", ls="", ms=4) plt.show()</code>
通过反转 x 和 y 的角色,我们可以确定沿 x 轴的交点:
<code class="python">plt.plot(vertical_data, gradient) plt.plot(np.zeros(len(z)), z, marker="o", ls="", ms=4) plt.show()</code>
此外,所提出的方法允许找到非零 y 值处的交点。只需在应用 find_roots 函数之前从曲线中减去所需的 y 值即可:
<code class="python">y0 = 1.4 z = find_roots(gradient, vertical_data - y0) plt.plot(z, np.zeros(len(z))+y0)</code>
最后,为了确定两条曲线之间的交点,计算曲线之间的差异并应用 find_roots 函数来定位交点积分:
<code class="python">y2 = ... z = find_roots(gradient, y2 - y1) plt.plot(gradient, y1) plt.plot(gradient, y2, color="C2") plt.plot(z, np.interp(z, gradient, y1), marker="o", ls="", ms=4, color="C1")</code>
以上是如何使用Python准确找到y = 0曲线的交点?的详细内容。更多信息请关注PHP中文网其他相关文章!