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

Patricia Arquette
发布: 2024-10-21 07:17:30
原创
536 人浏览过

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

来源:php
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!