Python で最適ロバストサーボ系のフィードバックゲインを求める
最適ロバストサーボ系のフィードバックゲインを Python で求める方法のメモ。 最適ロバストサーボ系のブロック線図は以下のようになります。

システムの拡大偏差系を求め、評価関数の重み \(\mathbf{Q}_{e}\) と \(r_{e}\) を定義し、リカッチ方程式を解けばフィードバックゲインを求めることができます。
import numpy as np import scipy as sp import control as ct Ae = np.array([[0, 1, 0], [0, -1, 1], [0, 0, 0]]) Be = np.array([[0], [0], [1]]) Ce = np.array([[1, 0, 0]]) Qe = Ce.T*Ce Re = np.array([[1]]) S, E, Ke = ct.care(Ae, Be, Qe, Re) Z = np.array([[0, 1, 0], [0, -1, 1], [1, 0, 0]]) K = Ke.dot(np.linalg.inv(Z)) K1 = [K[0][0], K[0][1]] K2 = K[0][2] print("K1 =\n", K1) print("K2 =\n", K2)
K1 = [2.1447003020766107, 1.2998696928637543] K2 = 1.0