識別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中文網其他相關文章!