Maison  >  Article  >  développement back-end  >  Comment trouver des interceptions exactes nulles et non nulles sur des tracés à l'aide de l'interpolation linéaire en Python ?

Comment trouver des interceptions exactes nulles et non nulles sur des tracés à l'aide de l'interpolation linéaire en Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-21 07:12:29755parcourir

How to Find Exact Zero and Non-Zero Intercepts on Plots Using Linear Interpolation in Python?

Trouver des 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.

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 zéro d'une courbe arbitraire :

<code class="python">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)</code>

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 toute valeur y non nulle (y0) en modifiant la ligne qui trouve les racines :

<code class="python">z = find_roots(x,y-y0)</code>

Intersections de deux 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 :

<code class="python">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")</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn