機械系エンジニアの備忘録

20代独身社会人。仕事では機械・機構の研究開発を行っているエンジニアが、自分の専門分野ではないpythonを扱って楽しむブログです。

MENU

【python】【制御工学】python-controlをインストールしてインパルス・ステップ・初期値応答を計算してみた

python-controlで、pythonでもMATLAB風に制御工学

■はじめに

前回、Scipyで伝達関数の設定とインパルス・ステップ応答を計算しました。

ただしScipyだと使える関数に制限があります。

またMATLABで制御工学をやっている人も多いので、MATLABと同じコード記述の方が何かと便利です。

そこで今回、MATLAB風にコードを書けるpython-controlをインストールし、前回と同じ計算+初期値応答を計算してみました。

気になる方は前回の記事と比較してみて下さい。

stjun.hatenablog.com

 

■コード

from control.matlab import *
import matplotlib.pyplot as plt
import numpy as np

#伝達関数の設定
num = [1]
den = [1, 0.1, 1]
sys = tf(num, den)

#ステップ応答
(y_s,t_s)=step(sys,T=np.arange(0,100,0.01))
#インパルス応答
(y_im,t_im)=impulse(sys,T=np.arange(0,100,0.01))
#初期値[2,3]応答
(y_in,t_in,x_in)=initial(sys,X0=[2,3],T=np.arange(0,100,0.01),return_x=True)

#グラフの設定
fig=plt.figure(figsize=(10,8))
ax1=plt.subplot2grid((3,1),(0,0))
ax1.plot(t_s,y_s)
ax2=plt.subplot2grid((3,1),(1,0))
ax2.plot(t_im,y_im)
ax3=plt.subplot2grid((3,1),(2,0))
ax3.plot(t_in,x_in)
plt.show()

実行すると以下の画面がでてきます。

f:id:stjun:20191007235115p:plain
上:ステップ応答、中央:インパルス応答、下:初期値応答(X0=[2,3])になります。

Scipyでは初期値応答ができなかったのでpython-controlを入れてよかったです。

ちなみにステップ応答は1に、インパルス応答と初期値応答は0で安定しています。

python-controlでは極も調べられます。

f:id:stjun:20191007235458p:plain

f:id:stjun:20191007235511p:plain

極の実軸が負であることからもこのシステムは安定であることが分かりますね。

 

■買って良かったもの紹介

今回はipadです。動画視聴や動画編集(Lumafusion)を使用しています。

12.9インチと迷ったのですが、ノートとして使う&持ち運ぶの2点から11インチにしました。満足しています。

ipad pro 12.9インチを買うならsurface pro6の方が良いと思います。windows10なのでpythonもフルに使えます。

 

 

■説明

伝達関数の定義は前回と同じなので省略します。

#ステップ応答 (y_s,t_s)=step(sys,T=np.arange(0,100,0.01))

のT=np.arange(0,100,0.01)は0~100まで0.01刻みで配列を作ることを意味します。

例えば0~1000まで1刻みで計算したければT=np.arange(0,1000,1)になります。

また初期値応答ですが書き方は以下になります。

return_x=Trueにしないとxの値は出力されずyの値だけが出力されるので注意してください。

#初期値[2,3]応答 (y_in,t_in,x_in)=initial(sys,X0=[2,3],T=np.arange(0,100,0.01),return_x=True)

 

■最後に

次回はフィードバック制御かPID制御のどちらかを気が向いたらやってみます。