La formule suivante. Cependant, $ A, Q, P \ in \ mathbb R ^ {n \ times n}, B \ in \ mathbb R ^ {n \ times m}, R \ in \ mathbb R ^ {m \ times m} $ , Q, R sont des matrices symétriques à valeur constante positive, et $ A, B, Q, R $ sont donnés pour trouver $ P $.
Il apparaît lors de la recherche du gain avec LQR de la théorie du contrôle moderne. LQR est la théorie du contrôle optimal, et le système
La méthode d'Arimoto-Potter (expliquée dans la section suivante) sera implémentée et résolue. A ce moment, le problème des valeurs propres de la matrice sera résolu, mais cela utilise numpy ou similaire.
La procédure sera expliquée. Voir les livres, etc. pour la preuve.
Matrice $ H \ in \ mathbb R ^ {2n \ fois 2n} $ appelée Hamilton Matrix
loin.
Il existe n valeurs propres de H dont la partie réelle est négative. Placez ceci comme $ \ lambda_1, \ lambda_2, ..., \ lambda_n $ et les vecteurs propres correspondants comme $ \ vec w_1, \ vec w_2, ..., \ vec w_n $.
Utilisez ceci pour obtenir $ Y, Z \ in \ mathbb R ^ {n \ times n} $
import numpy as np
import numpy.linalg as LA
def solve_are(A, B, Q, R):
# 1.Mettez la matrice de Hamilton
H = np.block([[A.T, -B @ LA.inv(R) @ B.T],
[-Q , -A]])
# 2.Décomposer les valeurs propres
eigenvalue, w = LA.eig(H)
# 3.Mettre une matrice auxiliaire
Y_, Z_ = [], []
n = len(w[0])//2
for i in range(2*n):
if eigenvalue[i].real < 0.0:
Y_.append(w.T[i][:n])
Z_.append(w.T[i][n:])
Y = np.array(Y_).T
Z = np.array(Z_).T
# 4.P est recherché
return Z @ LA.inv(Y)
A = np.array([[3., 1.],[0., 1.]])
B = np.array([[1.2], [1.]])
Q = np.array([[1., 0.2], [0.2, 1.0]])
R = np.array([[1.]])
P = solve_are(A, B, Q, R)
print("P")
print(P)
print("Côté gauche de l'équation algébrique de Riccati")
print(A@P + [email protected] + Q - P@[email protected](R)@B.T@P)
P
[[ 69.20010326 -66.19334596]
[-66.19334596 67.7487967 ]]
Côté gauche de l'équation algébrique de Riccati
[[-1.13686838e-13 5.11590770e-13]
[ 2.55795385e-13 -5.68434189e-13]]
Je l'ai résolu.
Recommended Posts