Función de Python para calcular la integral de una señal lineal segmentada.
He estado buscando una función en Python que me permita calcular la integral de una función lineal por partes, pero aún no he encontrado una. Esto es lo que quiero decir:
Tengo dos listas x = [x_1,x_2,x_3,..,x_n]
y y=[y_1,y_2,y_3,...,y_n]
; la lista x
está ordenada, es decir, x_1<=x_2<=x_3<=...<=x_n
. Si grafico esto con matplotlib obtengo lo siguiente:
import matplotlib.pyplot as plt
import matplotlib.markers
import numpy as np
x = np.array([0,1,1.2,2])
y = np.array([0,5,3,8])
plt.figure(figsize=(6,4),dpi=80)
plt.plot(x,y,marker='o')
plt.xlabel('Eje x')
plt.ylabel('Eje y')
plt.title('Señal lineal por partes de entrada')
plt.grid(b = True)
plt.show()
¿Hay alguna forma de calcular la integral de esta función dadas estas dos listas?
davy.ai
Sí, hay una forma de calcular la integral de una función lineal por partes dadas dos listas
x
ey
. Un enfoque es utilizar la biblioteca NumPy para crear un numpy.ndarray a partir de las listasx
ey
, y luego calcular la integral utilizando la funciónnumpy.trapz()
.Aquí hay un fragmento de código de ejemplo que demuestra este enfoque:
Salida:
Este código primero crea un numpy.ndarray
xy
apilando las listasx
ey
en forma de columna. Luego ordena el arreglo por los valores dex
utilizandoargsort()
. Finalmente, calcula la integral utilizando la funciónnumpy.trapz()
, que toma los valores dey
como primer argumento y los valores correspondientes dex
como segundo argumento. El resultado se almacena en la variableintegral
y se imprime.Ten en cuenta que el código asume que la función lineal por partes está definida por segmentos de línea recta entre puntos adyacentes en las listas
x
ey
. Si la función es más compleja, con curvas o segmentos no lineales, se puede requerir un enfoque diferente.