Encontrar intersecciones de curvas con cero
En Python, obtener valores exactos del eje y de un gráfico puede ser un desafío cuando el valor no es un número entero. Este artículo aborda este problema y presenta una solución basada en interpolación lineal.
Dadas dos matrices (vertical_data y gradient(temperature_data)), se genera un gráfico usando plt.plot. Sin embargo, el gráfico muestra un valor de y cercano a cero, pero no exactamente.
Interpolación lineal para la estimación de raíces
Para estimar la raíz exacta de una matriz numpy , se puede utilizar un método de interpolación lineal simple. El siguiente código demuestra cómo encontrar los valores cero de una curva arbitraria:
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)
Este código identifica las raíces de la curva y las traza como círculos en el valor y exacto de cero.
Intersecciones distintas de cero
Se puede utilizar el mismo enfoque para encontrar la intersección de una curva con cualquier y distinta de cero. -valor (y0) modificando la línea que encuentra las raíces:
z = find_roots(x,y-y0)
Dos intersecciones de curvas
El método de interpolación lineal también se puede utilizar para encontrar la intersección entre dos curvas. Al encontrar las raíces de la diferencia entre las dos curvas, podemos estimar su punto de intersección:
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")
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3