#Pythonで学ぶ制御工学< 伝達関数モデルと状態空間モデル >
##はじめに
基本的な制御工学をPythonで実装し,復習も兼ねて制御工学への理解をより深めることが目的である.
その第6弾として伝達関数モデルと状態空間モデルを扱う.
##状態空間モデルと伝達関数モデルの関係性
状態空間モデルは一意の伝達関数モデルに変換することができる.次にその過程を示す.
しかしながら,逆は定まらない.
##実装
先ほどの変換をPythonで実装してみる.以下にソースコードとそのときの出力を示す.
#####ソースコード
"""
2021/02/23
@Yuya Shimizu
状態空間モデルと伝達関数モデル
"""
from control import tf, tf2ss, ss2tf, canonical_form
#適当な伝達関数モデルを準備
numerator = [0, 1]
denominator = [1, 1, 1]
P = tf(numerator, denominator)
#伝達関数モデル → 状態空間モデル
Pss = tf2ss(P)
print(f"<伝達関数モデル → 状態空間モデル>\n{P}\n ↓\n\n{Pss}\n")
#状態空間モデル → 伝達関数モデル
Ptf = ss2tf(Pss)
print(f"\n<状態空間モデル → 伝達関数モデル>\n{Pss}\n ↓\n{Ptf}")
#可制御正準形への変換
Pr, T = canonical_form(Pss, form = 'reachable')
print(f"\n<可制御正準形への変換>\n{Pss}\n ↓\n\n{Pr}")
#可観測正準形への変換
Pr, T = canonical_form(Pss, form = 'observable')
print(f"\n<可観測正準形への変換>\n{Pss}\n ↓\n\n{Pr}")
#####出力
<伝達関数モデル → 状態空間モデル>
1
-----------
s^2 + s + 1
↓
A = [[-1. -1.]
[ 1. 0.]]
B = [[-1.]
[ 0.]]
C = [[ 0. -1.]]
D = [[0.]]
<状態空間モデル → 伝達関数モデル>
A = [[-1. -1.]
[ 1. 0.]]
B = [[-1.]
[ 0.]]
C = [[ 0. -1.]]
D = [[0.]]
↓
1
-----------
s^2 + s + 1
<可制御正準形への変換>
A = [[-1. -1.]
[ 1. 0.]]
B = [[-1.]
[ 0.]]
C = [[ 0. -1.]]
D = [[0.]]
↓
A = [[-1. -1.]
[ 1. 0.]]
B = [[1.]
[0.]]
C = [[-0. 1.]]
D = [[0.]]
<可観測正準形への変換>
A = [[-1. -1.]
[ 1. 0.]]
B = [[-1.]
[ 0.]]
C = [[ 0. -1.]]
D = [[0.]]
↓
A = [[-1. 1.]
[-1. 0.]]
B = [[0.]
[1.]]
C = [[1. 0.]]
D = [[0.]]
ここでプログラムに関して補足しておく.control
ライブラリのtf2ss
で状態空間モデルに変換しているわけだが,はじめの説明でもあったように一意に定まらないということで,可制御・可観測正準形になっているとは限らない.そこで,control
ライブラリのcanonical_form
という関数でさらに変換している.また,可制御正準形の変換時にreachable
(可到達)と指定しているが,これは連続時間の線形システムにおいては,可到達性と可制御性が同じ意味となるためである.
##プロパー性
最後にシステムの設計時に必要になるプロパー性についてまとめておく.
##感想
伝達関数モデルと状態空間モデルの関係性について触れた.また,可制御性や可観測性の話も出てきた.久しぶりに触れ,思い出すよい機会となった.また,プロパー性については,いまいち理解できていなかったんだと気づいた.特にプロパー性の意義について.システムの設計で非常に重要となる概念であることを理解した.
##参考文献
Pyhtonによる制御工学入門 南 祐樹 著 オーム社