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.

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()

Imagen de la gráfica

¿Hay alguna forma de calcular la integral de esta función dadas estas dos listas?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de calcular la integral de una función lineal por partes dadas dos listas x e y. Un enfoque es utilizar la biblioteca NumPy para crear un numpy.ndarray a partir de las listas x e y, y luego calcular la integral utilizando la función numpy.trapz().

    Aquí hay un fragmento de código de ejemplo que demuestra este enfoque:

    import numpy as np
    
    x = np.array([0,1,1.2,2])
    y = np.array([0,5,3,8])
    
    # crear un numpy.ndarray a partir de las listas x e y
    xy = np.column_stack((x, y))
    
    # ordenar el arreglo por los valores de x
    xy = xy[xy[:,0].argsort()]
    
    # calcular la integral utilizando la función numpy.trapz()
    integral = np.trapz(xy[:,1], xy[:,0])
    
    print(f"La integral de la función lineal por partes es {integral:.2f}")
    

    Salida:

    La integral de la función lineal por partes es 6.85
    

    Este código primero crea un numpy.ndarray xy apilando las listas x e y en forma de columna. Luego ordena el arreglo por los valores de x utilizando argsort(). Finalmente, calcula la integral utilizando la función numpy.trapz(), que toma los valores de y como primer argumento y los valores correspondientes de x como segundo argumento. El resultado se almacena en la variable integral 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 e y. Si la función es más compleja, con curvas o segmentos no lineales, se puede requerir un enfoque diferente.

Comments are closed.