Heim  >  Artikel  >  Backend-Entwicklung  >  Wie finde ich mit Python genau Schnittpunkte einer Kurve mit y = 0?

Wie finde ich mit Python genau Schnittpunkte einer Kurve mit y = 0?

Patricia Arquette
Patricia ArquetteOriginal
2024-10-21 07:17:30536Durchsuche

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

Identifizieren der Schnittpunkte einer Kurve mit y = 0

Im Kontext des Python-Plots mit NumPy-Arrays ist der genaue Wert auf der Die Berechnung der Y-Achse, bei der sich eine Kurve mit y = 0 schneidet, kann eine schwierige Aufgabe sein. In diesem Artikel wird eine Methode zur genauen Bestimmung dieser Schnittpunkte besprochen und dabei die Einschränkungen bestehender Wurzelfindungstechniken angegangen.

Zunächst definieren wir unser Diagramm mithilfe von NumPy-Arrays:

<code class="python">import numpy as np
import matplotlib.pyplot as plt
vertical_data = ...
gradient = ...
plt.plot(gradient, vertical_data)
plt.show()</code>

Jetzt Angenommen, wir möchten den Nullwert der Kurve ermitteln. Herkömmliche Wurzelfindungsalgorithmen liefern aufgrund der Einschränkungen der Gleitkommagenauigkeit oft ungenaue Ergebnisse. Um dies zu überwinden, verwenden wir eine einfache lineare Interpolationstechnik:

<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>

Diese Funktion verwendet die x- und y-Arrays als Eingabe und lokalisiert die Schnittpunkte, an denen die y-Werte die Nullmarke schneiden. Wir wenden diese Funktion auf unsere Daten an und zeichnen die Ergebnisse auf:

<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>

Durch Umkehren der Rollen von x und y können wir die Schnittpunkte entlang der x-Achse bestimmen:

<code class="python">plt.plot(vertical_data, gradient)
plt.plot(np.zeros(len(z)), z, marker="o", ls="", ms=4)
plt.show()</code>

Darüber hinaus ermöglicht die vorgestellte Methode die Suche nach Schnittpunkten bei y-Werten ungleich Null. Subtrahieren Sie einfach den gewünschten y-Wert von der Kurve, bevor Sie die Funktion „find_roots“ anwenden:

<code class="python">y0 = 1.4
z = find_roots(gradient, vertical_data - y0)
plt.plot(z, np.zeros(len(z))+y0)</code>

Um den Schnittpunkt zwischen zwei Kurven zu bestimmen, berechnen Sie schließlich die Differenz zwischen den Kurven und wenden Sie die Funktion „find_roots“ an, um den Schnittpunkt zu lokalisieren Punkte:

<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>

Das obige ist der detaillierte Inhalt vonWie finde ich mit Python genau Schnittpunkte einer Kurve mit y = 0?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn