Retrato de Fase
El retrato de fase es una representación gráfica que de las variables de estado y sus derivadas, representadas por flechas. Es un campo vectorial que se construye con la matriz $A$ del sistema considerando el vector $u$ nulo, por lo que la ecuación de estados:
\[\dot{x} = A\,x+B\,u\]se reduce a:
\[\dot{x} = A\,x\label{eqA}\]Esta representación gráfica nos muestra cual es la tendencia de un sistema de manera natural a moverse (como un gradiente) partiendo de un punto en la gráfica.
El algoritmo
A continuación les presento una forma de calcularlo. Básicamente debemos calcular las derivadas usando la ecuación (\ref{eqA}):
Usaremos la matriz:
\[A = \begin{bmatrix}-1&-3\\3&-1\end{bmatrix}\]import numpy as np
import matplotlib.pyplot as plt
A = np.array([[-1,-3],[3,-1]])
# Definimos el espacio donde
# haremos el calculo del retrato de fase
x0 = np.linspace(-2,2,20)
x1 = np.linspace(-2,2,20)
# Creamo una malla de puntos
X0,X1=np.meshgrid(x0,x1)
# Creamos las matrices que guardarán
# la información de la derivadas
dX0 = np.zeros(X0.shape)
dX1 = np.zeros(X1.shape)
n,m = X1.shape
# Iteramos por todos los valores de la matriz
for i in range(n):
for j in range(m):
dX = np.matmul(A,np.array([[X0[i,j]],[X1[i,j]]]))
dX0[i,j]=dX[0,0]
dX1[i,j]=dX[1,0]
plt.figure(figsize=(4, 4))
plt.quiver(X0,X1,dX0,dX1,color='b');
plt.xlabel("x0")
plt.ylabel("x1")
Resultando en:
El algoritmo está escrito para dos variables de estado. Debe ser reinterpretado para más variables.