Es scheint, dass Sympy, eine mathematische Formelverarbeitungsbibliothek von Python, Bewegungsgleichungen verarbeiten kann, die in der Physik vorkommen, daher würde ich es gerne versuchen. Dieses Mal werde ich ein Skript schreiben, um die Bewegungsgleichung des Masse-Feder-Dämpfer-Systems abzuleiten, das sich auch in pydy_example auf der Referenzstelle befindet. Angenommen, Sie haben ein Massenfederdämpfersystem, wie in der Abbildung gezeigt. Wenn Sie eine normale Bewegungsgleichung formulieren, lautet diese wie folgt. Bewegungsgleichung
{\bf M}\dot{{\bf x}} = {\bf f}({\bf x})
Hier
{\bf x} = [{\it x}, \dot{{\it x}}]^T \\
{\bf M} = \begin{bmatrix} 1 & 0 \\ 0 & m \end{bmatrix} \\
{\bf f}({\bf x}) = \begin{bmatrix} \dot{x} \\ -k x - c \dot{x} + m g + f \end{bmatrix}
Nehme an, dass Als nächstes kommt das Skript. Wir verwenden ein Modul namens sympy.physics.mechanics. Ich verwende die Kane-Methode, um eine kinetische Gleichung zu formulieren, bin mir aber nicht sicher. Es scheint einen Weg zu geben, dies mit der Lagrange-Methode zu lösen.
mass_spring_dumper.py
#!/usr/bin/python
#coding:utf-8
import sympy as sym
import sympy.physics.mechanics as me
x, v = me.dynamicsymbols('x v')
m, c, k, g, t, f = sym.symbols('m c k g t f')
#Koordinatensystem erstellen
ceiling = me.ReferenceFrame('C')
o = me.Point('o') #Deckenpunkt
p = me.Point('p') #Qualitätspunkt
o.set_vel(ceiling, 0)
p.set_pos(o, x * ceiling.x)
p.set_vel(ceiling, v * ceiling.x)
#Berechnen Sie die externe Kraft, die auf den Qualitätspunkt ausgeübt wird
damping = -c * p.vel(ceiling) #Dämpfung
stiffness = -k * p.pos_from(o) #Frühling
gravity = m * g * ceiling.x #Schwere
exf = f * ceiling.x #Andere äußere Kräfte
forces = damping + stiffness + gravity + exf
print forces
mass = me.Particle('mass', p, m)
kane = me.KanesMethod(ceiling, q_ind=[x], u_ind=[v], kd_eqs=[v - x.diff(t)])
kane.kanes_equations([(p, forces)], [mass])
M = kane.mass_matrix_full
f = kane.forcing_full
print M
print f
print M.inv() * f
Die Ausgabe sieht folgendermaßen aus:
(-c*v + f + g*m - k*x)*C.x
Matrix([[1, 0], [0, m]])
Matrix([[v(t)], [-c*v(t) + f + g*m - k*x(t)]])
Matrix([[v(t)], [(-c*v(t) + f + g*m - k*x(t))/m]])
Wenn Sie lernen, wie man es benutzt, wird es ein sehr mächtiges Werkzeug sein. Es gibt Ahorn und Mathematica gegen eine Gebühr, aber es ist teuer, solche Software kostenlos zu verwenden, daher bin ich dankbar, dass solche Software kostenlos verwendet werden kann.
Sympy-Dokumentation http://docs.sympy.org/latest/index.html pydy examples https://github.com/PythonDynamics/pydy_examples
Recommended Posts