Maison > développement back-end > Tutoriel Python > 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
Libérer: 2024-10-21 07:17:30
original
636 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal