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!