さて
第二回は「制御のためのMATLAB」2章 MATLABによる動的システム解析のための準備
2−2 動的システムの数学モデルの変換
MATLABでは
1 伝達関数表現から状態空間表現へ tf2ss
2 状態空間表現から伝達関数表現へ ss2tf
が主に使うような気がする。
pythonではこれらはscipyにて実現されている。
1 tf2ss 教科書69ページ 例題2−8をpythonでやってみると
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sat Nov 13 17:29:29 2021
@author: muranokenichi
"""
from scipy.signal import tf2ss
num = [25.04, 5.008] # 分母
den = [1, 5.03247, 25.1026,5.008] # 分子
# 伝達関数 → 状態方程式
A, B, C, D = tf2ss(num, den)print(' A=', A)
print(' B=', B)
print(' C=', C)
print(' D=', D)
--------実行結果は
A= [[ -5.03247 -25.1026 -5.008 ]
[ 1. 0. 0. ]
[ 0. 1. 0. ]]
B= [[1.]
[0.]
[0.]]
C= [[ 0. 25.04 5.008]]
D= [[0.]]
正解!
2 ss2tf 例題2−9
from scipy.signal import ss2tf
A= [[ 0. ,1. , 0. ],
[ 0. , 0. , 1. ],
[ -5.008 , -25.1026 , -5.03247 ]]
C= [[1.,0.,0.]]
B= [[ 0. ] , [ 25.04] , [-121.005]]
D= [[0.]]
# 状態方程式 → 伝達関数G
G= ss2tf(A, B ,C, D)
print('G(s)=', G)
で実行結果はーーー
G(s)= (array([[ 0.00000000e+00, -1.77635684e-15, 2.50400000e+01,
5.00804880e+00]]), array([ 1. , 5.03247, 25.1026 , 5.008 ]))
となり正解!
pythonでもいけましたね
※コメント投稿者のブログIDはブログ作成者のみに通知されます