pythonで制御工学

pythonで制御工学

はじめに

電験では、電卓は必須で関数電卓は不可とされているが、実際の研究や場合では、パソコンや計算機をどんどん使用するべきである。そこで、以下のサイトから面白そうな古典制御工学に関するpythonプログラムを入手したので、紹介しておこう。

ただし、今回の場合は、リンク先のコードを少し改造させたものである。
環境は、Python-control(matklabベース)とmatplotとnumpyをanaconda環境で使用した。

Python-controlに関しては、pip install controlでインストールを行った。

コード

 

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

x_1=float(input("実部を入力してください"))
y_1=float(input("虚部を入力してください"))


a= complex(x_1,y_1)
b= complex(x_1,-y_1)


#伝達関数の設定
num = [1]#分子
den = [1, -(a+b), a*b]#分母
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)


#極の表示

print(pole(sys))#極の実軸が負の場合は、解は収束する


#グラフの設定
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()



コードについての説明

コードについて説明する。まずは、最初に根となる数値を代入すると、それが解となる二次方程式を作成後、伝達関数が形成される。

例えば、実部にa,虚部にbを入力した場合、解がa+jb,a-jbとなる二次方程式が形成される。ここで解析結果の一例を示す。

(1)a>0のとき

指数部の実部が0よりも大きい場合は、発散する。つまり、不安定解になってしまう。これは、発信回路やハウリングといった現象に当てはまる。

これは、aが0.1の時である。

ただし、1番目がステップ応答、2番目がインパルス応答、3番目が、[2,3]応答とした。

(2)a=0のとき

実部が0の場合も発散して、振幅一定の振動解になる。この場合も不安定な解になる。

(3)a<0のとき

最後に、実部が0よりも小さい場合は、減衰振動をして、一定値に収束する。なので、この場合は安定である。
a=-0.1のとき

まとめ

数値解析においてプログラミングは多用される。理系の学問においては、matlabといった有料のソフトウェアが便利であるが高価である。なので、今回はフリーで使用することが出来るpythonを用いた。以下おすすめの書籍も載せておくので、興味があったら読んでみても良いかもしれない。



関連記事

コメント

  1. この記事へのコメントはありません。

コメントするためには、 ログイン してください。