Recherche d'intersections de courbes avec zéro
En Python, obtenir des valeurs exactes de l'axe Y à partir d'un tracé peut être difficile lorsque la valeur n'est pas un nombre entier. Cet article aborde ce problème et présente une solution basée sur l'interpolation linéaire.
Étant donné deux tableaux (vertical_data et gradient(temperature_data)), un tracé est généré à l'aide de plt.plot. Cependant, le tracé affiche une valeur y proche de zéro, mais pas exactement zéro.
Interpolation linéaire pour l'estimation de la racine
Pour estimer la racine exacte d'un tableau numpy , une méthode d'interpolation linéaire simple peut être utilisée. Le code suivant montre comment trouver les valeurs nulles d'une courbe arbitraire :
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)
Ce code identifie les racines de la courbe et les trace sous forme de cercles à la valeur y exacte de zéro.
Interceptions non nulles
La même approche peut être utilisée pour trouver l'intersection d'une courbe avec tout y non nul -value (y0) en modifiant la ligne qui trouve les racines :
z = find_roots(x,y-y0)
Deux intersections de courbes
La méthode d'interpolation linéaire peut également être utilisée pour trouver l'intersection entre deux courbes. En trouvant les racines de la différence entre les deux courbes, on peut estimer leur point d'intersection :
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")
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3