Comment trouver les points d'intersection d'une courbe avec l'axe Y et d'autres courbes en Python ?

Barbara Streisand
Libérer: 2024-10-21 07:12:02
original
730 Les gens l'ont consulté

How to Find the Intersection Points of a Curve with the Y-Axis and Other Curves in Python?

Détermination de l'intersection zéro d'une courbe

En Python, trouver le point exact où une courbe coupe l'axe y (y=0 ) peut être un défi. Un tableau numpy peut représenter une courbe, mais il ne fournit pas de méthode directe pour identifier les zéros.

Pour résoudre ce problème, une approche d'interpolation linéaire peut être utilisée. Le code suivant montre comment trouver le point d'intersection exact :

<code class="python">import numpy as np
import matplotlib.pyplot as plt

# Generate sample data
N = 750
x = 0.4 + np.sort(np.random.rand(N)) * 3.5
y = (x - 4) * np.cos(x * 9.) * np.cos(x * 6 + 0.05) + 0.1

# Define a function to find roots (zeros)
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)

# Find the intersection point
z = find_roots(x, y)

# Plot the curve and the intersection point
plt.plot(x, y)
plt.plot(z, np.zeros(len(z)), marker="o", ls="", ms=4)
plt.show()</code>
Copier après la connexion

Ce script générera un tracé montrant la courbe et un marqueur au point d'intersection exact avec l'axe y.

Trouver des interceptions à des valeurs non nulles

Pour trouver des interceptions à des valeurs non nulles (par exemple, y0), la même approche peut être appliquée en trouvant les zéros de la courbe décalés de y0 :

<code class="python">y0 = 1.4
z = find_roots(x, y - y0)
# ...
plt.plot(z, np.zeros(len(z)) + y0)</code>
Copier après la connexion

Intersection de deux courbes

Pour trouver le point d'intersection entre deux courbes, trouvez les zéros de la différence entre les deux courbes :

<code class="python">x = .4 + np.sort(np.random.rand(N)) * 3.5
y1 = (x - 4) * np.cos(x * 9.) * np.cos(x * 6 + 0.05) + 0.1
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!