ホームページ > バックエンド開発 > Python チュートリアル > Python を使用して y = 0 の曲線の交点を正確に見つける方法

Python を使用して y = 0 の曲線の交点を正確に見つける方法

Patricia Arquette
リリース: 2024-10-21 07:17:30
オリジナル
636 人が閲覧しました

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>
ログイン後にコピー

最後に、2 つの曲線間の交差を決定するために、曲線の差を計算し、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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート