首頁  >  文章  >  後端開發  >  如何使用Python準確找到y = 0曲線的交點?

如何使用Python準確找到y = 0曲線的交點?

Patricia Arquette
Patricia Arquette原創
2024-10-21 07:17:30537瀏覽

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

識別y = 0 的曲線的交點

在使用NumPy 數組進行Python 繪圖的上下文中,曲線與y = 0 相交的y = 0 相交的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