```
from sympy.interactive import printing
printing.init_printing()

from sympy import var, simplify, collect, expand, Matrix, eye, inverse_laplace_transform, exp
```


```
var("s, t")
```

La matriz exponencial se define asi:

$$
\exp{(At)} = \sum_{i=0}^{\infty} \frac{1}{i!} (At)^i
$$

sin embargo, es completamente impractico calcularla de esta manera, principalmente porque es una serie infinita...

Dicho esto, hay otras maneras de calcularla, aqui exploraremos algunas de ellas.

# Calculo de matriz exponencial por la transformada de Laplace

El primer método esta definido por la siguiente ecuación:

$$
exp(At) = \mathcal{L}^{-1} \left\{ (sI - A)^{-1} \right\}
$$

por lo que podemos calcular rapidamente diferentes matrices exponenciales como ejemplo:


```
A1 = Matrix([[0, 1], [-1, -2]])
A1
```


```
(s*eye(2) - A1).inv()
```


```
[inverse_laplace_transform((s*eye(2) - A1).inv()[i], s, t) for i in range(4)]
```

En donde $\theta(t)$, es la función del escalon unitario de [Heavyside](http://en.wikipedia.org/wiki/Heaviside_step_function). Por el momento podemos ignorarla; digamos que se convierte en lo siguiente:

$$
\begin{bmatrix}
t+1 & t \\
-t & -t+1
\end{bmatrix} e^{-t}
$$

Podemos hacer otros ejemplos:


```
A2 = Matrix([[0, 1], [0, 0]])
A2
```


```
(s*eye(2) - A2).inv()
```


```
[inverse_laplace_transform((s*eye(2) - A2).inv()[i], s, t) for i in range(4)]
```

es decir:

$$
\begin{bmatrix}
1 & t \\
0 & 1
\end{bmatrix}
$$


```
A3 = Matrix([[0, 1],[-1, 0]])
A3
```


```
(s*eye(2) - A3).inv()
```


```
[inverse_laplace_transform((s*eye(2) - A3).inv()[i], s, t) for i in range(4)]
```

es decir:

$$
\begin{bmatrix}
\cos{t} & \sin{t} \\
-\sin{t} & \cos{t}
\end{bmatrix}
$$

# Calculo de la matriz exponencial por su forma de Jordan

Si bien el método anterior es una manera de calcular la matriz exponencial que funciona bien en la mayoria de los casos, impone restricciones de tiempo cuando la matriz es excesivamente grande, y el calculo de su inversa sería demasiado costoso. Por esta razon, existe un metodo mas elegante de calcular la matriz exponencial, que toma en cuenta algunas de las propiedades de esta matriz.

Consiste en notar que la representacion de [Jordan](http://en.wikipedia.org/wiki/Jordan_matrix) $J$ de una matriz cualquiera $A$, no es mas que la suma de dos matrices mas simples, un compuesta por los eigenvalores de $A$, $D$, y otra con el resto de los elementos, que invariablemente será [nilpotente](http://es.wikipedia.org/wiki/Nilpotente) $N$.

$$
T^{-1} A T = J = D + N
$$

por lo que si aplicamos la función exponencial, primero, a los elementos de la derecha, tendremos:

$$
\exp{(Jt)} = \exp{((D + N)t)} = \exp{(Dt)} \cdot \exp{(Nt)}
$$

donde:

$$
D =
\begin{bmatrix}
\lambda_1 & 0 & 0 & \dots & 0 \\
0 & \lambda_2 & 0 & \dots & 0 \\
0 & 0 & \lambda_3 & \dots & 0 \\
\vdots & \vdots & \vdots && \vdots \\
0 & 0 & 0 & \dots & \lambda_k
\end{bmatrix}
$$

$$
N =
\begin{bmatrix}
0 & * & * & \dots & * \\
0 & 0 & * & \dots & * \\
0 & 0 & 0 & \dots & * \\
\vdots & \vdots & \vdots && \vdots \\
0 & 0 & 0 & \dots & 0
\end{bmatrix}
$$

y por lo tanto:

$$
\exp{(Dt)} =
\begin{bmatrix}
e^{\lambda_1 t} & 0 & 0 & \dots & 0 \\
0 & e^{\lambda_2 t} & 0 & \dots & 0 \\
0 & 0 & e^{\lambda_3 t} & \dots & 0 \\
\vdots & \vdots & \vdots && \vdots \\
0 & 0 & 0 & \dots & e^{\lambda_k t}
\end{bmatrix}
$$

$$
\exp{(Nt)} = \sum_{j = 0}^{\infty} \frac{1}{j!} (Nt)^j = \sum_{j = 0}^{\gamma - 1} \frac{1}{j!} (Nt)^j
\quad \text{con}
\quad \gamma = \max{\left\{ \gamma_1, \gamma_2, \dots, \gamma_k \right\} }
$$

es decir, que para la matriz de eigenvalores, su exponencial esta compuesta por la exponencial de cada eigenvalor, y para la matriz nilpotente, solo tenemos que calcular la expansion de Taylor hasta $\gamma - 1$, siendo $\gamma$ a lo mas, el rango de la matriz.

Tomando el primer ejemplo de arriba:


```
T1, J1 = A1.jordan_form()
J1
```

donde podemos observar que las matrices $D$ y $N$ son:


```
D1 = Matrix([[-1, 0], [0, -1]])
D1
```


```
N1 = Matrix([[0, 1], [0, 0]])
N1
```

Teniendo estas matrices, tan solo tenemos que sacar la exponencial de cada una:


```
eD1 = (D1*t).exp()
eD1
```

y para $N$ tenemos que hacer la expansión de Taylor hasta $\gamma = \operatorname{rank} A - 1$, pero el rango de $A$ es 2, por lo que:


```
eN1 = eye(2) + N1*t
eN1
```

Si ahora regresamos a nuestra ecuación para la forma de Jordan, podemos ver que teniamos:

$$
T^{-1} A T = D + N
$$

de donde podemos concluir que:

$$
\exp{(T^{-1} \cdot At \cdot T)} = \exp{(Dt + Nt)}
$$

$$
T^{-1} \cdot \exp{(At)} \cdot T = \exp{(Dt)} \cdot \exp{(Nt)}
$$

$$
\exp{(At)} = T \cdot \exp{(Dt)} \cdot \exp{(Nt)} \cdot T^{-1}
$$

por lo que ahora solo tenemos que multiplicar cada una de estas matrices que ya hemos calculado:


```
eA1 = T1*eD1*eN1*T1.inv()
eA1
```

De donde facilmente se puede ver que:

$$
\begin{bmatrix}
t+1 & t \\
-t & -t+1
\end{bmatrix} e^{-t}
$$

Haciendo los ejemplos anteriores por este metodo:


```
T2, J2 = A2.jordan_form()
J2
```


```
D2 = Matrix([[0, 0], [0, 0]])
N2 = Matrix([[0, 1], [0, 0]])
```


```
eD2 = (D2*t).exp()
eD2
```


```
eN2 = eye(2) + N2*t
eN2
```


```
eA2 = T2*eD2*eN2*T2.inv()
eA2
```


```
T3, J3 = A3.jordan_form()
J3
```


```
D3 = J3
N3 = Matrix([[0, 0], [0, 0]])
```


```
eD3 = simplify((D3*t).exp())
eD3
```


```
eN3 = eye(2) + N3*t
eN3
```


```
eA3 = T3*eD3*eN3*T3.inv()
simplify(eA3)
```

Lo cual es:

$$
\begin{bmatrix}
\cos{(t)} & \sin{(t)} \\
-\sin{(t)} & \cos{(t)}
\end{bmatrix}
$$

### Nota
Cabe aclarar, que a pesar de que estos calculos fueron hechos a traves de software de calculo simbolico, estos métodos son principalmente para realizarse sin el uso de computadora, principalmente porque en lugar de hacer todo esto, lo más facil sería hacer:


```
(A1*t).exp()
```


```
(A2*t).exp()
```


```
simplify((A3*t).exp())
```

pero los métodos descritos anteriormente, son una buena opción cuando el uso de la computadora no es permitido.

2706486d6a644f531a592b51842e19c27bfc7d67
ipynb
Jupyter Notebook
IPythonNotebooks/Teoria de Control I/Matrix Exponencial.ipynb
chelizalde/DCA
34fd4d500117a9c0a75b979b8b0f121c1992b9dc
MIT
IPythonNotebooks/Teoria de Control I/Matrix Exponencial.ipynb
chelizalde/DCA
34fd4d500117a9c0a75b979b8b0f121c1992b9dc
MIT
IPythonNotebooks/Teoria de Control I/Matrix Exponencial.ipynb
chelizalde/DCA
34fd4d500117a9c0a75b979b8b0f121c1992b9dc
MIT
2021-03-20T12:44:13.000Z
2021-03-20T12:44:13.000Z
Qwen/Qwen-72B
1. YES
2. YES