技術士(総合技術監理・機械部門)のブログ

技術士がお届けする,技術,工学,技術者倫理などの話題

pythonで制御系設計2

2021-11-13 17:31:34 | 工学

さて

第二回は「制御のための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でもいけましたね