es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Encontrar puntos relevantes en la curva dada.

Considere el siguiente código Python que traza una curva y la analiza para encontrar algunos puntos:

%matplotlib inline
import numpy as np
from numpy.polynomial.polynomial import Polynomial
from scipy.interpolate import UnivariateSpline
from scipy.signal import savgol_filter
import scipy.stats
import scipy.optimize
import matplotlib.pyplot as plt

# Crear el eje X de la curva.
x = np.arange(10000)
y = np.zeros_like(x, dtype=float)

# Crear una línea recta para los primeros 1000 puntos.
y[:1000] = (10.0,) * 1000
# Para los puntos restantes, crear una función exponencial.
y[1000:] = 20 * np.exp(-x[1000:]/1200.0) 
# Añadir ruido.
y += np.random.normal(0, 0.5, x.size)

# Crear un polinomio.
poly = Polynomial.fit(x, y, 15)
# Crear los valores Y para el polinomio.
py = poly(x)

# Calcular la primera y segunda derivada.
dxdy = np.gradient(py)
dx2dy2 = np.gradient(dxdy)

# Graficar la curva original y el ajuste en la parte superior.
plt.plot(x, y, '', color='black')
plt.plot(x, py, '', color='red')

# Graficar la primera y segunda derivada.
plt.plot(x, dxdy * 100, '', color='blue')
plt.plot(x, dx2dy2, '', color='green')

https://i.stack.imgur.com/IASah.png

En la imagen anterior, he marcado los puntos que quiero calcular:

Creo que puedo usar la primera derivada para calcular el primero, que es el comienzo de la transición.

No estoy seguro de cómo calcular el segundo, que es el final de la transición o cuando la curva se vuelve plana. He intentado calcularlo usando el promedio de los últimos 100 puntos en la curva y encontrando el primer valor en la curva por debajo de ese promedio, sin embargo, no parece muy confiable.

EDIT1:

Mientras investigaba la primera derivada, encontré la siguiente solución potencial, que es encontrar el cambio de signo en los lados izquierdo y derecho del pico, ilustro con una imagen de la primera derivada y la señal y el ajuste a continuación:

https://i.stack.imgur.com/S3UE5.png
https://i.stack.imgur.com/MgNlF.png

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para calcular el segundo punto, que es el final de la transición o cuando la curva se vuelve plana, una opción podría ser usar la segunda derivada. Cuando la curva se vuelve plana, la segunda derivada debería estar cerca de cero. Por lo tanto, un enfoque podría ser encontrar el índice donde la segunda derivada cruza por debajo de un umbral determinado, lo que indica que la curva se ha vuelto plana. Otra opción podría ser usar una función de suavizado como el filtro de Savitzky-Golay para suavizar la curva y luego encontrar el índice donde la primera derivada esté cerca de cero, lo que indica una curva plana. Además, se podrían aplicar otras técnicas de aprendizaje automático o procesamiento de señales dependiendo del problema específico y los datos.

Comments are closed.