Python-Control 制御工学 1次遅れステップ応答を matplotlib で出力
Python-Control を使った制御工学に取り組んでいます。最終的にはPID制御を用いたフィードバック制御系の設計に活用できればいいなと考えています。本記事では、1次遅れ要素のステップ応答波形を matplotlib で出力してみます。
環境
・windows 10(64bit)
・Visual Studio Code 1.45.1
・Python 3.8.2(32bit版)
1次遅れ系 ステップ応答
1次遅れ要素のステップ応答を導出します。s領域における1次遅れ要素の伝達関数は次式になります。この伝達関数モデルを Python で作成し、パラメータを与えてステップ応答の波形を matplotlib で出力します。
出力されるステップ応答波形について、上式のs領域における1次遅れ要素を逆ラプラス変換すると次式になります。時定数 T で K に向かって収束する波形になります。時定数は目標値の 63% に到達するまでの時間になります。つまり、ステップ信号が入力されてから 0.63K に達するまでの時間になります。
Python のソースコードは以下になります。
# 数値演算ライブラリ
import numpy as np
# 制御工学ライブラリ
from control import matlab
# グラフ描画
from matplotlib import pyplot as plt
# パラメータ
K = 10.0
T = 0.1
# 伝達関数モデル作成
num = [K]
den = [T, 1]
G1st = matlab.tf(num, den)
# 伝達関数モデル出力
print(G1st)
# ステップ応答波形
t = np.linspace(0, 1.0, 1000)
(output, t) = matlab.step(G1st, t)
# 出力パラメータ
plt.plot(t, output)
plt.axhline(K, ls=":", color="blue")
# グラフ表示設定
plt.rcParams['font.family'] = 'Times New Roman' # 全体のフォント
plt.title('1st order step', fontsize=10) # グラフタイトル
plt.xlabel('time [sec]', fontsize=10) # x軸ラベル
plt.ylabel('Output', fontsize=10) # y軸ラベル
plt.xlim([0, 1.0]) # x軸範囲
plt.ylim([0, 12.0]) # y軸範囲
plt.tick_params(labelsize = 10) # 軸ラベルの目盛りサイズ
plt.tight_layout() # ラベルがきれいに収まるよう表示
plt.grid() # グリッド表示
plt.show() # グラフの表示
結果
K=10 としたので、ステップ応答波形は 10 に収束します。また、0.63K=6.3 に到達するまでの時間は T=0.1sec となっています。設定したパラメータ通りの波形を得られました。
10
---------
0.1 s + 1
参考書(制御工学)
私は制御工学の参考書として「詳解 制御工学演習(共立出版)」を使っています。少し値段が高いですが、かなり良書だと思います。数式展開の過程や、ブロック線図、グラフがしっかり書かれているので分かりと思います。
参考 note (過去記事)
以上
何かお役に立てたら、サポートしていただけると嬉しいです!モチベーションを高めて、アウトプットしていきます!