Die folgende Formel. $ 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 sind positive symmetrische Matrizen mit konstantem Wert, und $ A, B, Q, R $ werden angegeben, um $ P $ zu finden.
Es erscheint, wenn der Gewinn mit LQR der modernen Steuerungstheorie gefunden wird. LQR ist die optimale Steuerungstheorie und das System
Die Methode von Arimoto-Potter (im nächsten Abschnitt erläutert) wird implementiert und gelöst. Zu diesem Zeitpunkt wird das Eigenwertproblem der Matrix gelöst, dies verwendet jedoch Numpy oder dergleichen.
Die Vorgehensweise wird erklärt. Siehe Bücher usw. als Beweis.
Matrix $ H \ in \ mathbb R ^ {2n \ times 2n} $ heißt Hamilton Matrix
weit.
Es gibt n Eigenwerte von H, deren Realteil negativ ist. Platzieren Sie dies als $ \ lambda_1, \ lambda_2, ..., \ lambda_n $ und die entsprechenden Eigenvektoren als $ \ vec w_1, \ vec w_2, ..., \ vec w_n $.
Verwenden Sie dies, um $ Y, Z \ in \ mathbb R ^ {n \ times n} $ zu erhalten
import numpy as np
import numpy.linalg as LA
def solve_are(A, B, Q, R):
# 1.Setzen Sie die Hamilton-Matrix
H = np.block([[A.T, -B @ LA.inv(R) @ B.T],
[-Q , -A]])
# 2.Eigenwerte zerlegen
eigenvalue, w = LA.eig(H)
# 3.Setzen Sie eine Hilfsmatrix
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 wird gesucht
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("Linke Seite der algebraischen Riccati-Gleichung")
print(A@P + [email protected] + Q - P@[email protected](R)@B.T@P)
P
[[ 69.20010326 -66.19334596]
[-66.19334596 67.7487967 ]]
Linke Seite der algebraischen Riccati-Gleichung
[[-1.13686838e-13 5.11590770e-13]
[ 2.55795385e-13 -5.68434189e-13]]
Ich habe es gelöst.
Recommended Posts