首页  >  文章  >  后端开发  >  如何使用Python准确找到y = 0曲线的交点?

如何使用Python准确找到y = 0曲线的交点?

Patricia Arquette
Patricia Arquette原创
2024-10-21 07:17:30536浏览

How to Accurately Find Intersection Points of a Curve with y = 0 Using Python?

识别 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn