Pythonで制御工学 伝達関数の結合

control

Python-controlを用いて、Pythonで制御工学を学習するシリーズを新たに作ってみました。

スポンサーリンク

Python-control

制御工学におけるシミュレーションがPythonで実現できるサードパーティ製のパッケージです。

シミュレーションにおいてMATLABが使えればよいのですが、あちらは有料でそこそこの値段なのでシミュレーションを行うにはハードルが高いです。一方、Pythonは無料でシミュレーションが出来ます。環境の整備が必須になることがネックですが、環境構築方法は以下の記事で解説しております。

未構築の方はこちらの記事を参考に構築してみてください!

伝達関数の結合

今回は伝達関数の結合を行います。

以下のソースコードでは、

  • 伝達関数の作成
  • 直列結合
  • 並列結合
  • フィードバック結合
  • 伝達関数の約分

についてそれぞれソースコード内のコメントアウトを用いて解説しています。

ぜひコピペしてどのように出力されるのか試してみてください!

from control.matlab import * #tf()やseries()など制御工学的な関数を使用するためにインポート

if __name__ == "__main__":
    S1 = tf([0, 1], [1, 1]) #tf([], [])で伝達関数モデルを作成できる。1/(s+1)
    S2 = tf([1, 1], [1, 1, 1]) #伝達関数(s+1)/(s^2+s+1)
    print("S1 =",S1)
    print("S2 =",S2)

    Sseries = S1 * S2 #直列結合 series(S1, S2)もok

    Sparallel = S1 + S2 #並列結合 parallel(S1, S2)もok

    Sfeedback = feedback(S1, S2) 
    Sfeedback2 = S1 / (1 + S1*S2) #こちらでもokだが約分されないので.minreal()で約分する
    print("直列結合", Sseries)
    print("並列結合", Sparallel)
    print("\n")
    print("feedback()によるフィードバック結合", Sfeedback)
    print("\n数式で直接フィードバック結合を表現", Sfeedback2)
    print("約分", Sfeedback2.minreal())
マスルキン

当ブログ管理人のマスルキンです。

高専電気系学科に5年間在籍。卒業後は専攻科に進学し現在に至る。

生まれつき聴覚障害があり
補聴器の使用、コミュニケーションでは読唇や手話などを用いています。

当ブログでは
・プログラミング・研究関係の備忘録
・趣味(筋トレ、カメラ、プラモデル、etc...)
・自身の日常
などを自由気ままに皆様に発信いたします。

記事が皆様のお役に立てば幸いです。

マスルキンをフォローする
control Python プログラミング
スポンサーリンク
マスルキンをフォローする
マスルキンの部屋

コメント

タイトルとURLをコピーしました