LoginSignup
3
1

More than 5 years have passed since last update.

PythonControlでインパルス応答を求める。

Last updated at Posted at 2017-12-03

目的

Python Controlで、1自由度系(バネマスダンバ系)の伝達関数のインパルス応答を求める。

事前準備

PythonControlをインストールする

システムのモデル化

以下の状態方程式について考える。
68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f37333032302f30323238396566372d313961652d333164632d616361302d3930653565643864666330322e6a706567.jpg

m:質量[kg]
k:ばね定数[N/m]
c:粘性減衰係数[N・s/m]
f:力[N]

G(s)=\frac{Y(s)}{U(s)}=\frac{1}{ms^2+cs+k}

インパルス応答

Python ControlはInitial応答は以下の関数で求める。

control.matlab.Initial(sys, T=None, X0=0.0, input=0, output=None, return_x=False)

  • Parameters:
    • sys:LTIシステム(線型時不変システム)の 状態空間or伝達関数
    • T:時間ベクトル(optionで与えられていなければ、自動計算する)
    • X0: 初期値(default=0)、数値は配列に自動変換。
    • input: int型、このシミュレーションへの入力。
    • output: int型、このシミュレーションからの出力。

control.matlab.Initialは線形システムのインパルス応答を求めることができる。
システムに複数の入力または出力(MIMO)がある場合は、シミュレーション用に1つの入力を選択する必要がある。
オプションで、1つの出力を選択することができる。
出力が選択されていない場合、すべての出力する。
パラメータのinputとoutputがこれを行う。その他の入力はすべて0に設定され、他のすべての出力は無視される。

引用元:
control.matlab.Initial

サンプルコード

responce_impulse.py

#!/usr/bin/env python
from control.matlab import *
from matplotlib import pyplot as plt
from scipy import arange 

def main():
    k=1.0
    m=0.1
    c=0.1
    num = [0, 0,1] 
    den = [m, c, k]
    sys1 = tf(num, den) 
    print sys1
    (y1a, T1a) = initial(sys1,X0 = [0, 1],T = arange(0, 10, 0.01))
    plt.axhline(0, color="b", linestyle="--")
    plt.plot(T1a, y1a)
    plt.show()

if __name__ == "__main__":
  main()



Initial.jpg

サンプルコードは以下に格納。
https://github.com/nnn112358/python-control_test

参考

PythonControlをインストールする

PythonControlで1自由度系の伝達関数を求める。

PythonControlで2自由度系の伝達関数を求める。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1