Maison  >  Article  >  développement back-end  >  Comment trouver avec précision les points d'intersection d'une courbe avec y = 0 à l'aide de Python ?

Comment trouver avec précision les points d'intersection d'une courbe avec y = 0 à l'aide de Python ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-21 07:17:30536parcourir

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

Identifier les points d'intersection d'une courbe avec y = 0

Dans le contexte du traçage Python à l'aide de tableaux NumPy, la valeur précise sur le L'axe y où une courbe coupe y = 0 peut être une tâche insaisissable. Cet article traite d'une méthode permettant de déterminer avec précision ces points d'intersection, en tenant compte des limites des techniques de recherche de racines existantes.

Pour commencer, définissons notre tracé à l'aide de tableaux NumPy :

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

Maintenant , supposons que nous voulions localiser la valeur zéro de la courbe. Les algorithmes conventionnels de recherche de racine fournissent souvent des résultats imprécis en raison des limitations de précision des virgules flottantes. Pour surmonter ce problème, nous utilisons une technique d'interpolation linéaire simple :

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

Cette fonction prend les tableaux x et y en entrée et localise les points d'intersection où les valeurs y franchissent le repère zéro. Nous appliquons cette fonction à nos données et traçons les résultats :

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

En inversant les rôles de x et y, nous pouvons déterminer les points d'intersection le long de l'axe des x :

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

De plus, la méthode présentée permet de trouver des points d'intersection à des valeurs y non nulles. Soustrayez simplement la valeur y souhaitée de la courbe avant d'appliquer la fonction find_roots :

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

Enfin, pour déterminer l'intersection entre deux courbes, calculez la différence entre les courbes et appliquez la fonction find_roots pour localiser l'intersection. points :

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

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