Cálculo de las matrices de controlabilidad y observabilidad en Python/SageMath
Jonny Cristhian Otero Baca
Dado un sistema representado en el espacio de estados por las matrices A, B, C, D, como paso previo al diseño de un controlador u observador debemos verificar la controlabilidad u observabilidad del sistema.
Por medio de la libreria Numpy, podemos calcular las matrices de controlabilidad y observabilidad usando Python y Sagemath, para mas teoría respecto al tema referirse a .
Antes de implementar las funciones que calculen la controlabilidad y observabilidad de un sistema en el espacio de estados, se hizo necesario definir una función que calculara la potencia n de una matriz A, el codigo de la función es el siguiente:
import numpy as np def power_matrix(A,n): if n==0: return(np.identity(A.ndim)) if n==1: return A X=A for i in range(1,n): X=X.dot(A) return X
A continuación definimos la función controlabilidad, esta función definida en Python retorna la matriz de controlabilidad. Para calcular el resultado, es necesario proporcionar como parametros las matrices A y B.
def controlability(A,B): U=B for i in range(1,A.ndim): U1=np.dot(power_matrix(A,i),B).transpose() U=np.insert(U,i,U1,axis=1) return U
La función observabilidad la definimos como sigue:
def observability(A,C): V=C for i in range(1,A.ndim): V=np.append(V,np.dot(C,power_matrix(A,i)),axis=0) return V
Probamos las funciones ingresando los siguientes sistemas de prueba:
A=np.array([[1.5,1],[1,0]]) B=np.array([[1.0],[0.0]]) C=np.array([[2.,-1.]]) U=controlability(A,B) view(U) V=observability(A,C) view(V)
Este código retorna:
U = ⎡⎢⎣
1.0
1.5
0.0
1.0
⎤⎥⎦
V = ⎡⎢⎣
2.0
− 1.0
2.0
2.0
⎤⎥⎦
Referencias
[1]