【python-control】リカッチ方程式の解を計算

当記事では、python-controlでリカッチ方程式の解を求める方法について紹介します。

リカッチ方程式とは

リカッチ方程式とは、最適レギュレータを設計するのに必要な微分方程式です。
(この微分方程式を解かないと最適フィードバックゲインが求まらない)
python-controlの「control.lqr」メソッドを用いると、Matlabのlqr関数のようにリカッチ方程式の解Pを計算できます。

※python-controlはMatlab風ライブラリなので、Matlabの資料が役に立ちます

参考文献
1 【制御理論】リカッチ方程式
2 python-controlドキュメント:lqrメソッドの使い方
3 Matlabドキュメント:lqr関数の使い方

ソースコード

リカッチ方程式の解を求めるサンプロプログラムです。

# -*- coding: utf-8 -*-
from control.matlab import *
import numpy as np

def main():
  # システム行列の定義
  A = np.array([[0, 1],
                [0, -1]])
  B = np.array([[0],
                [1]])
  Q = np.array([[1, 0],
                [0, 1]])
  R = np.array([[1]])

  # LQRでリカッチ方程式の解Pを計算
  K, P, e = lqr(A, B, Q, R)
  # 結果表示
  print("リカッチ方程式の解:\n",P)

if __name__ == "__main__":
  main()

実行結果

サンプルプログラムの実行結果です。

リカッチ方程式の解:
[[ 2. 1.]
[ 1. 1.]]
関連記事