Kurvenschnittpunkte mit Null finden
In Python kann es schwierig sein, genaue Y-Achsenwerte aus einem Diagramm zu erhalten, wenn der Wert kein Wert ist ganze Zahl. Dieser Artikel befasst sich mit diesem Problem und stellt eine Lösung basierend auf linearer Interpolation vor.
Angesichts zweier Arrays (vertical_data und gradient(temperature_data)) wird mit plt.plot ein Diagramm erstellt. Das Diagramm zeigt jedoch einen y-Wert an, der nahe bei, aber nicht genau Null liegt.
Lineare Interpolation für die Wurzelschätzung
Zum Schätzen der genauen Wurzel eines Numpy-Arrays kann eine einfache lineare Interpolationsmethode verwendet werden. Der folgende Code zeigt, wie man die Nullwerte einer beliebigen Kurve findet:
import numpy as np
def find_roots(x, y):
s = np.abs(np.diff(np.sign(y))).astype(bool)
return x[:-1][s] np.diff(x)[s]/(np.abs(y[1:][s]/y[:-1][s]) 1)
x = .4 np.sort(np.random.rand(750))*3.5
y = (x-4)*np.cos(x*9.)*np.cos(x*6 0.05) 0.1
z = find_roots(x,y)
plt.plot(x,y)
plt.plot(z, np.zeros(len(z)), marker="o", ls="", ms=4)
Dieser Code identifiziert die Wurzeln der Kurve und stellt sie als Kreise dar beim genauen y-Wert von Null.
Achsenabschnitte ungleich Null
Derselbe Ansatz kann zum Suchen verwendet werden der Schnittpunkt einer Kurve mit einem beliebigen y-Wert ungleich Null (y0) durch Modifizieren der Linie, die die Wurzeln findet:
z = find_roots(x,y-y0)
Zwei Kurvenschnittpunkte
Die lineare Interpolationsmethode kann auch verwendet werden, um den Schnittpunkt zwischen zwei Kurven zu finden. Indem wir die Wurzeln der Differenz zwischen den beiden Kurven finden, können wir ihren Schnittpunkt schätzen:
y2 = (x - 2) * np.cos(x * 8.) * np.cos(x * 5 0.03) 0.3
z = find_roots(x,y2-y1)
plt.plot(x,y1)
plt.plot(x,y2, color="C2")
plt.plot(z, np.interp(z, x, y1), marker="o", ls="", ms=4, color="C1")
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3