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

Susan Sarandon
Libérer: 2024-10-21 07:12:29
original
689 Les gens l'ont consulté

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

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

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>
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!