Pythonで学ぶ制御工学 第4弾:状態空間モデル


#Pythonで学ぶ制御工学< 状態空間モデル >

はじめに

基本的な制御工学をPythonで実装し,復習も兼ねて制御工学への理解をより深めることが目的である.
その第4弾として状態空間モデルを扱う.

状態空間モデル

行列表現とすることで,多元高階の微分方程式を1階の微分方程式で表現するもの
伝達関数との違いや,状態空間モデルの一般式を次の図で示す.

次に1入力1出力である場合の状態空間モデルを示す.

状態空間モデルの計算

以下では,前々回から扱っている制御モデルについて状態空間モデルをそれぞれ求める過程を示す.なお,ここで扱う制御モデルは1入力1出力である.

状態空間モデル①:台車

状態空間モデル②:アーム

状態空間モデル③:RLC回路

状態空間モデル④:増幅回路

実装

ここでは,Python上で状態空間モデルを表現する方法を学ぶために実装する.そのため,適当な値を用いて実装している.以下にソースコードとそのときの出力を示す.

ソースコード
state_space_model.py
"""
2021/02/20
@Yuya Shimizu

状態空間モデル
"""
from control import ss, ssdata

##ss関数では,MATLAB表記が可能

#状態空間モデル構築
A = '0 1; -1 -1'
B = '0 ; 1'
C = '1 0'
D = '0'

state_model  = ss(A, B, C, D)
print(f"<状態空間モデル>\n{state_model}\n")

#状態空間モデルからA~D行列の抽出
print("<定数行列A~D>")
print('A=', state_model.A)
print('B=', state_model.B)
print('C=', state_model.C)
print('D=', state_model.D)

#もしくは,以下の方法でまとめて抽出できる
sysA, sysB, sysC, sysD = ssdata(state_model)

出力
<状態空間モデル>
A = [[ 0.  1.]
 [-1. -1.]]

B = [[0.]
 [1.]]

C = [[1. 0.]]

D = [[0.]]


<定数行列A~D>
A= [[ 0.  1.]
 [-1. -1.]]
B= [[0.]
 [1.]]
C= [[1. 0.]]
D= [[0.]]

感想

状態空間モデルの構成を復習することができた.ここでは,状態空間モデルをPython上で表現する方法についても学ぶことができた.これにより,状態空間モデルを扱うことが可能となった.ただ,状態空間モデルの定数行列はあらかじめ計算しておく必要がありそうだ.ここは,伝達関数のときと同じである.だから,また同じように物理量などを引数にするなどしてある制御モデル特有の状態空間モデル生成関数も作成できそうである.

参考文献

Pyhtonによる制御工学入門  南 祐樹 著  オーム社