4.4.2 LTI Laplace – Ejercicio para Y(s)=H(s)X(s) con constantes símbolo con Sympy-Python

Los ejercicios incluyen constantes tipo símbolo, que por simplicidad de la ecuación en la resolución se usan solo las operaciones básicas para la transformada Inversa de Laplace.

Ejemplo 1.  Y(s) dado H(s) y X(s) con una constante α

Referencia: Oppenheim ejemplo 9.37 p718 pdf749, semejante al ejercicio sistema-modelo LTI Lathi ejemplo 1.16 p111. Oppenheim problema 2.61c p164 pdf195

Suponga un sistema LTI causal que se describe mediante la ecuación diferencial:

\frac{\delta ^2}{\delta t}y(t) + 3 \frac{\delta}{\delta t}y(t) + 2y(t) = x(t)

que en el dominio ‘s’ se escribe como

s^2 Y(s) + 3 s Y(s) + 2 Y(s) = X(s) (s^2 + 3 s + 2) Y(s) = X(s) H(s) = \frac{X(s)}{Y(s)} = \frac{1}{s^2 + 3 s + 2}

Que es semejante a lo realizado en el ejemplo 2 de H(s) Diagramas de bloques, dominio ‘s’ y ecuaciones diferenciales, de donde se tiene que:

H(s) = \frac{1}{s^2 + 3s +2} = \frac{1}{(s+1)(s+2)}

Suponga que la señal de entrada es x(t) = α μ(t) , usando la tabla de transformadas de Laplace,  la entrada del sistema es,

X(s) = \frac{\alpha}{s} = \frac{\alpha}{s+0}

Siempre que las señales de entrada son cero para t<0, la convolución es la multiplicación de los términos. (no aplica para valores t<0)

Y(s) = H(s) X(s) = \Big[\frac{1}{(s+1)(s+2)} \Big]\Big[\frac{\alpha}{s+0}\Big]

usando fracciones parciales con Python para encontrar el equivalente, la expresión se puede separar en,

Y(s) = \frac{\alpha}{2}\frac{1}{s+0} - \alpha\frac{1}{s+1} +\frac{\alpha}{2}\frac{1}{s+2}

Luego, aplicando la transformada inversa de Laplace de 1/(s+a) que es una exponencial e-at μ(t), se tiene la respuesta en el dominio del tiempo.

y(t) = \frac{\alpha}{2}e^{0} u(t) - \alpha e^{-t}u(t) + \frac{\alpha}{2} e^{- 2t} u(t) y(t) = \alpha \Big [ \frac{1}{2} - e^{-t} + \frac{1}{2} e^{- 2t} \Big] u(t)

Instrucciones con Sympy-Python

Se crea la expresión H(s) y X(s) en forma simbólica usando las variables, s y a.

Dado que la expresión es tipo polinomio, y que no existen exponenciales, el desarrollo del algoritmo puede realizarse con operaciones básicas realizadas en las  secciones anteriores. Añadiendo la operación para encontrar la salida Y(s)

# Señal de salida Y(s)
Ys = Hs*Xs
Ys_parcial = Ys.apart(s)

Además de realizar la transformada inversa de Laplace en cada término de Y(s).  Con lo que se obtiene el resultado:

Ys:
       a        
----------------
  / 2          \
s*\s  + 3*s + 2/

 Ys = Hs*Xs :
    a         a      a 
--------- - ----- + ---
2*(s + 2)   s + 1   2*s

 y(t) :
                                         -2*t             
a*Heaviside(t)      -t                a*e    *Heaviside(t)
-------------- - a*e  *Heaviside(t) + --------------------
      2                                        2          
>>> sym.pprint(yt.simplify())
  / 2*t      t    \  -2*t             
a*\e    - 2*e  + 1/*e    *Heaviside(t)
--------------------------------------
                  2                   
>>>   

Instrucciones con Sympy-Python

# Y(s) = H(s)*X(s)
# Oppenheim ejemplo 9.37 p718/pdf746
import sympy as sym

# INGRESO
s = sym.Symbol('s')
t = sym.Symbol('t', real=True)
a = sym.Symbol('a', real=True)

Hs = 1/(s**2+3*s+2)
Xs = a/s

# PROCEDIMIENTO
# Señal de salida Y(s)
Ys = Hs*Xs
Ysp = Ys.apart(s)

yt = sym.inverse_laplace_transform(Ysp,s,t)

# SALIDA
print('Ys:')
sym.pprint(Ys)
print('\n Ys = Hs*Xs :')
sym.pprint(Ysp)
print('\n y(t) :')
sym.pprint(yt)

Ejemplo 2. Y(s) con condiciones iniciales tipo constante simbolo

Referencia: Oppenheim ejemplo 9.38 p719

Considere el sistema caracterizado por la ecuación diferencial con condiciones iniciales.

\frac{\delta^2}{\delta t^2}y(t) + 3 \frac{\delta}{\delta t}y(t) + 2y(t) = x(t) y(0^{-}) = \beta \text{, } y'(0^{-}) = \gamma

sea x(t) = αμ(t)

X(s) = \frac{\alpha}{s} = \frac{\alpha}{s+0}

Aplicando la transformada de Laplace en ambos lados de la ecuación con condiciones iniciales y aplicando la propiedad de diferenciación:

\frac{\delta^2}{\delta t^2}y(t) \Rightarrow s^2Y(s) - y(0^{-})s - y'(0^{-}) = s^2Y(s) - \beta s - \gamma \frac{\delta}{\delta t}y(t) \Rightarrow sY(s) - y(0^{-}) = sY(s) - \beta

resultados que se insertan en la ecuación original de derivadas de t:

[s^{2}Y(s) - \beta s - \gamma] + 3[sY(s) - \beta] + 2Y(s) = \frac{\alpha}{s}

que se reordenan para despejar Y(s),

[s^{2}+3s +2] Y(s) - \beta s - (\gamma + 3 \beta) = \frac{\alpha}{s} [s^{2}+3s +2] Y(s) = \frac{\alpha}{s}+ \beta s + (\gamma + 3 \beta) (s+1)(s+2)Y(s) = \frac{\alpha}{s}+ \beta s + (\gamma + 3 \beta) Y(s) = \frac{\alpha}{s(s+1)(s+2)}+ \frac{\beta s}{(s+1)(s+2)} + \frac{(\gamma + 3 \beta)}{(s+1)(s+2)} Y(s) = \frac{\beta (s+3)}{(s+1)(s+2)} + \frac{\gamma}{(s+1)(s+2)} + \frac{\alpha}{s(s+1)(s+2)}

donde Y(s) es la transformada unilateral de Laplace de y(t)

el último término, representa la respuesta del sistema LTI causal y la condición de reposo inicial, conocido también como la respuesta en estado cero.

Una interpretación análoga se aplica a los primeros dos términos del miembro derecho de la ecuación, que representa la respuesta del sistema cuando la entrada es cero (α=0) , conocida también como respuesta a entrada cero.

Observe que la respuesta a entrada cero es una función lineal de los valores de las condiciones iniciales. Demostrando que la respuesta es la superposición del estado cero y respuesta a entrada cero.

si α=2, β = 3 y γ=-5, al realizar la expansión en fracciones parciales encontramos que:

Y(s) = \frac{1}{s} - \frac{1}{s+1} + \frac{3}{s+2}

con la aplicación de las tablas de transformadas se obtiene:

y(t) = \Big[ 1 - e^{-t} + 3 e^{-2t} \Big] \mu (t) \text{, para } t\gt 0

Instrucciones con Sympy-Python

En este caso, se ingresan las propiedades de diferenciación para Laplace, aunque pueden crearse a partir de una fórmula mas general en la siguiente sección.

La ecuación se define como una expresión de (lado_izquierdo)=(lado_derecho) contruida a partir la ecuación del problema incluyendo las condiciones iniciales diferentes de cero.

Luego se busca la expresión solución para Ys, por simplicidad se la cambia a fracciones parciales, asi es más sencillo usar la tabla de transformadas de Laplace.

Para una sustituir los valores de a,b y g, se usa un diccionario {} con las parejas de {variable: valor}.

ecuacion:
   2                                 a
Y*s  + 3*Y*s + 2*Y - b*s - 3*b - g = -
                                     s

 Y(s): 
       2              
a + b*s  + 3*b*s + g*s
----------------------
     / 2          \   
   s*\s  + 3*s + 2/   

 Y(s) en Fracciones parciales
 a    a - 2*b - 2*g   a - 2*b - g
--- + ------------- - -----------
2*s     2*(s + 2)        s + 1   

sustituye valores de a, b y g
 Ys:
  3       1     1
----- - ----- + -
s + 2   s + 1   s

 y(t) con constantes simbolo 
/   2*t                                     t\  -2*t             
\a*e    + a - 2*b - 2*g + 2*(-a + 2*b + g)*e /*e    *Heaviside(t)
-----------------------------------------------------------------
                                2                                

sustituye valores de a, b y g

 y(t): 
/ 2*t    t    \  -2*t             
\e    - e  + 3/*e    *Heaviside(t)

 y(t) expande expresion
                -t                   -2*t             
Heaviside(t) - e  *Heaviside(t) + 3*e    *Heaviside(t)
>>> 

Compare los resultados con lo expuesto en la parte teórica.

# Y(s) con condiciones iniciales como constantes
# Oppenheim ejemplo 9.38 p719
import numpy as np
import sympy as sym

# INGRESO
t = sym.Symbol('t', real=True)
s = sym.Symbol('s')
a,b,g = sym.symbols('a b g')
Y = sym.Symbol('Y')

# propiedad de diferenciacion
d2Y = (s**2)*Y - b*s - g
dY  = s*Y - b

Xs = a/s    # señal de entrada

# PROCEDIMIENTO
# ecuacion del sistema
Lizq = d2Y + 3*dY + 2*Y # Lado izquierdo
Lder = Xs
ecuacion = sym.Eq(Lizq, Lder)

# despeja la ecuacion para Y(s)
Ys = sym.solve(ecuacion,Y)[0]

Yspc = sym.apart(Ys,s) # incluye constante simbolo

Ysp = Yspc.subs({a:2,b:3,g:-5})

# y(t) con inversa transformada Laplace
ytc = sym.inverse_laplace_transform(Yspc,s,t)
yt = sym.inverse_laplace_transform(Ysp,s,t)

# SALIDA
print('ecuacion:')
sym.pprint(ecuacion)
print('\n Y(s): ')
sym.pprint(Ys)
print('\n Y(s) en Fracciones parciales')
sym.pprint(Yspc)
print('\nsustituye valores de a, b y g')
print(' Ys:')
sym.pprint(Ysp)
print('\n y(t) con constantes simbolo ')
sym.pprint(ytc)
print('\nsustituye valores de a, b y g')
print('\n y(t): ')
sym.pprint(yt)
print('\n y(t) expande expresion')
sym.pprint(sym.expand(yt))