Finden Sie mit PythonControl die Übertragungsfunktion des Systems mit einem Freiheitsgrad.

Zweck

Formulieren Sie eine Zustandsgleichung für ein System mit einem Freiheitsgrad (Federmassendämpfersystem) und konvertieren Sie die Zustandsgleichung mit Python Control in eine Übertragungsfunktion. Zum Vergleich werden auch das Verfahren und die Beschreibung zum Erhalten der Übertragungsfunktion aus der Laplace-Transformation beschrieben.

Vorbereitungen

Python Control installieren

Zustandsgleichungen und Übertragungsfunktionen

Die Zustandsgleichung wird durch die folgende Gleichung ausgedrückt.

\dot{x}(t)=Ax(t)+Bu(t) \\
y(t)=Cx(t)+Du(t)

Laplace-Umwandlung der Zustandsgleichung

sX(s)=AX(s)+BU(s) \\
Y(s)=CX(s)+DU(s)

Wenn Sie den Ausdruck konvertieren,

sX(s)-AX(s)=BU(s) \\
(sI-A)X(s)=BU(s) \\
X(s)={(sI-A)}^{-1} BU(s) \\

Die Übertragungsfunktion G (s) ist

G(s)=\frac{Y(s)}{U(s)}=\frac{{(sI-A)}^{-1} BU(s) +DU(s)}{U(s)}=(sI-A)^{-1} B +DU

Erhalten von.

In Python-Control Durch Eingabe der Matrix von A, B, C, D in die Funktion control.ss2tf kann die Übertragungsfunktion gemäß der obigen Gleichung erhalten werden. http://python-control.readthedocs.io/en/latest/generated/control.ss2tf.html

Formulierung der Zustandsgleichung

Banemasu.jpg

m: Masse [kg] k: Federkonstante [N / m] c: Viskoser Abklingkoeffizient [N ・ s / m] f: Kraft [N]

Wenn du sagst Die obige Bewegungsgleichung lautet

m\ddot{x}+c\dot{x}+kx=f \\

Wird sein.

Finden Sie die Übertragungsfunktion aus der Zustandsgleichung.

Transformieren Sie die Formel hier

m\ddot{x}+c\dot{x}+kx=f \\
m\ddot{x}=-c\dot{x}-kx+f \\
\ddot{x}=-c/m \dot{x}-k/m x+f/m \\

Und.

x_{1}=x  \\
x_{2}=\dot{x} \\

Wenn du sagst

\\
\dot x_{1} ={x_{2}} \\
\dot x_{2}= -c/m \dot{x_{2}}-k/m x_{1}+f/m \\

Wenn Sie dies in eine Matrix schreiben

\\
\begin{bmatrix}
\dot x_{1}  \\
\dot x_{2}  
\end{bmatrix}
=
\begin{bmatrix}
0 & 1 \\
-k/m & -c/m
\end{bmatrix}
\begin{bmatrix}
x_{1}  \\
x_{2}  
\end{bmatrix}
+
\begin{bmatrix}
0 \\
1/m 
\end{bmatrix}
f

des Weiteren,

y=Wenn x,\\

y=
\begin{bmatrix}
1 & 0
\end{bmatrix}
\begin{bmatrix}
x_{1}  \\
x_{2}  
\end{bmatrix}

Deshalb,


\\
\begin{bmatrix}
\dot x_{1}  \\
\dot x_{2}  
\end{bmatrix}
=
\begin{bmatrix}
0 & 1 \\
-k/m & -c/m
\end{bmatrix}
\begin{bmatrix}
x_{1}  \\
x_{2}  
\end{bmatrix}
+
\begin{bmatrix}
0 \\
1/m 
\end{bmatrix}
f \\
y=
\begin{bmatrix}
1 & 0
\end{bmatrix}
\begin{bmatrix}
x_{1}  \\
x_{2}  
\end{bmatrix}

Im Vergleich zur Zustandsgleichung

x(t)=
\begin{bmatrix}
x_{1}  \\
x_{2}  
\end{bmatrix}

,
u(t)=f
,

A=
\begin{bmatrix}
0 & 1 \\
-k/m & -c/m
\end{bmatrix}
,
B=
\begin{bmatrix}
0 \\
1/m 
\end{bmatrix}
,
C=
\begin{bmatrix}
1 & 0 
\end{bmatrix}
,
D=[0]

Wird sein.

Von Oben, Der Code zum Finden der Übertragungsfunktion mit Python-Steuerung lautet wie folgt.

-signal_degree_of_freedom_system_1.py

#!/usr/bin/env python
from control.matlab import *
from matplotlib import pyplot as plt
    
def main():
    k=3.0
    m=0.1
    c=0.01
    A = [[0., 1], [-k/m, -c/m]]
    B = [[0.], [1./m]]
    C = [[1., 0.0]]
    D = [[0.]]
    sys1 = ss2tf(A, B, C, D)
    print sys1
   
    bode(sys1)    
    plt.show()
    
if __name__ == "__main__":
  main()

Ausführungsergebnis

$ ./signal_degree_of_freedom_system_1.py
       10
----------------
s^2 + 0.1 s + 30

Figure_1.png

Laplace-Transformation der Zustandsgleichung, um die Übertragungsfunktion zu erhalten.

Aus der Zustandsgleichung gilt, wenn u (t) = f

m\ddot{x}(t)+c\dot{x}(t)+kx(t)=u(t) \\

Laplace-Konvertierung

ms^2X(s)+cX(s)+kX(s)=U(s) \\

Wenn y = x,

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

Die Übertragungsfunktion ist

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

Von Oben, Der Code zum Finden der Übertragungsfunktion mit Python-Steuerung lautet wie folgt.

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

def main():
  k=3.0
  m=0.1
  c=0.01
  num = [0, 0,1] 
  den = [m, c, k]
  sys = tf(num, den) 
  print sys
  bode(sys)    
  plt.show()

if __name__ == "__main__":
  main()

Ausführungsergebnis

$ ./signal_degree_of_freedom_system_2.py 
          1
--------------------
0.1 s^2 + 0.01 s + 3

Figure_1-2.png

Beispielcode

Der Beispielcode ist unten gespeichert. https://github.com/nnn112358/python-control_test

Recommended Posts

Finden Sie mit PythonControl die Übertragungsfunktion des Systems mit einem Freiheitsgrad.
Finden Sie den optimalen Wert der Funktion mit einem genetischen Algorithmus (Teil 2)
Finden Sie den Tag nach Datum / Uhrzeit heraus
[Circuit x Python] So ermitteln Sie die Übertragungsfunktion eines Schaltkreises mit Lcapy
Berechnen Sie die Summe der eindeutigen Werte durch Pandas-Kreuztabellen
Finden Sie den Speicherort der mit pip installierten Pakete heraus
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Speichern Sie die Ausgabe von GAN nacheinander ~ Mit der Implementierung von GAN durch PyTorch ~
Ich habe die Strategie des Aktiensystemhandels mit Python evaluiert.
Wenn Sie eine Liste mit dem Standardargument der Funktion angeben ...
Finden Sie die numerische Lösung der gewöhnlichen Differentialgleichung zweiter Ordnung mit scipy
Fassen wir den Grad der Kopplung zwischen Modulen mit Python-Code zusammen
[Python] Eine einfache Funktion zum Ermitteln der Mittelkoordinaten eines Kreises
Gewinner des Mannes, der den höchsten Grad an Ähnlichkeit mit der ursprünglichen Geschichte in "Der Gewinner desjenigen, der das stinkendste Hototogisu geschrieben hat" hat.
Finden Sie die Definition des Wertes von errno
Finden Sie die Bearbeitungsentfernung (Levenshtein-Entfernung) mit Python
Ermitteln Sie mit NumPy die Trägheitsspindel und das Hauptträgheitsmoment aus dem Trägheitstensor
Finden Sie die allgemeinen Begriffe der Tribonacci-Sequenz in linearer Algebra und Python
Ermitteln Sie den Mindestwert der Funktion mithilfe der Partikelgruppenoptimierungsmethode (PSO).