[PYTHON] Equation de mouvement avec sympy

Equation de mouvement avec sympy

Il semble que sympy, une bibliothèque de traitement de formules mathématiques de python, puisse gérer les équations de mouvement qui apparaissent en physique, alors j'aimerais l'essayer. Cette fois, j'écrirai un script pour dériver l'équation de mouvement du système masse-ressort-amortisseur, qui se trouve également dans pydy_example sur le site de référence. Tout d'abord, supposons que vous ayez un système d'amortisseur à ressort de masse comme indiqué sur la figure. Si vous formulez une équation de mouvement normal, ce sera comme suit. mass_spring_damper.png Équation du mouvement

{\bf M}\dot{{\bf x}} = {\bf f}({\bf x})

ici

{\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}

Supposer que Vient ensuite le script. Nous utilisons un module appelé sympy.physics.mechanics. J'utilise la méthode de Kane pour formuler une équation cinétique, mais je n'en suis pas sûr. Il semble y avoir un moyen de le résoudre avec la méthode de Lagrange.

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')

#Créer un système de coordonnées
ceiling = me.ReferenceFrame('C')

o = me.Point('o') #Point plafond
p = me.Point('p') #Point qualité
o.set_vel(ceiling, 0)
p.set_pos(o, x * ceiling.x)
p.set_vel(ceiling, v * ceiling.x)

#Calculer la force externe appliquée au point de qualité
damping = -c * p.vel(ceiling) #Amortissement
stiffness = -k * p.pos_from(o) #Printemps
gravity = m * g * ceiling.x #la gravité
exf = f * ceiling.x #Autres forces externes

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

La sortie ressemble à ceci:

(-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]])

Si vous étudiez comment l'utiliser, ce sera un outil très puissant. Il existe de l'érable et de la mathématique payants qui peuvent formuler des formules pour les systèmes mécaniques, mais comme les deux sont chers, je suis reconnaissant qu'un tel logiciel puisse être utilisé gratuitement.

Site de référence

documentation sympy http://docs.sympy.org/latest/index.html pydy examples https://github.com/PythonDynamics/pydy_examples

Recommended Posts

Equation de mouvement avec sympy
Laissez Python calculer l'équation de mouvement d'Euler Lagrange
Equation de mouvement à double pendule en python
Partez numpy? !! Différencier partiellement la matrice avec Sympy
Résolution d'équations de mouvement en Python (odeint)
Superposer des graphiques avec sympy
Avec Sympy, ne t'inquiète pas
[Python] Résoudre des équations avec sympy
Animation de l'équation de diffusion avec NumPy
Traitement parallèle avec Parallel de scikit-learn
Prédiction de la moyenne Nikkei avec Pytorch 2
Souvenirs de combats avec Selenium
Prédiction de la moyenne Nikkei avec Pytorch
Trouvez la solution numérique de l'équation différentielle ordinaire du second ordre avec scipy
Calcul sans erreur avec le big.Float de Golang
Recherche en grille d'hyper paramètres avec Scikit-learn
Jugement de vacances, y compris les vacances avec bash
Jouez avec la série Poancare et SymPy
Ecriture du langage C avec Sympy (métaprogrammation)
Premiers pas avec Python Bases de Python
Libre de codage en dur des fonctions avec SymPy
Jeu de vie avec Python! (Le jeu de la vie de Conway)
Prédiction de la moyenne Nikkei avec Pytorch ~ Makuma ~
Automatisation des opérations à distance avec Fabric
10 fonctions du "langage avec batterie" python
Prédiction de l'onde de péché avec keras
4ème nuit de boucle avec pour
Principes de base pour toucher MongoDB avec MongoEngine
Détecte les personnes avec le module de capteur humain
Implémentation de la méthode Dyxtra par python
Intégration multiple avec Python et Sympy
Coexistence de Python2 et 3 avec CircleCI (1.0)
Application de graphiques avec des curseurs
Etude de base d'OpenCV avec Python
4/22 prédiction de l'onde de péché avec keras