Comment dire à SymPy qu'une variable est une fonction du temps?
Nov 26 2020
J'ai une matrice de rotation 3D en tant que telle:
R = sp.Matrix([
[ sp.cos(q1 + q2), -sp.sin(q1 + q2), 0],
[-sp.sin(q1 + q2), sp.cos(q1 + q2), 0],
[ 0, 0, 1]
])

Où q1 et q2 sont des angles. L'un d'eux, q2 (t) est fonction du temps, il change. Comment puis-je dire ça à sympy?
Je voudrais différencier cette matrice au fil du temps, mais je ne sais pas comment faire cela.
C'est comme ça que j'ai tout déclaré:
q1, q2, t = sp.symbols('q1 q2 t', real=True)
R = sp.Matrix([
[ sp.cos(q1 + q2), -sp.sin(q1 + q2), 0],
[-sp.sin(q1 + q2), sp.cos(q1 + q2), 0],
[ 0, 0, 1]
])
sp.diff(R, t)
C'est la sortie que j'obtiens sp.diff(R, t)
:

J'ai calculé un différentiel de R (par t) à la main et j'aimerais donc obtenir quelque chose comme ça dans SymPy:

Réponses
1 wsdookadr Dec 04 2020 at 23:15
Vous devez déclarer q1
et en q2
tant que fonctions non définies, puis les utiliser dans la R
matrice calculée au point t
.
import sympy as sp
t = sp.symbols('t', real=True)
q1 = sp.Function('q_1')
q2 = sp.Function('q_2')
R = sp.Matrix([
[ sp.cos(q1(t) + q2(t)), -sp.sin(q1(t) + q2(t)), 0],
[-sp.sin(q1(t) + q2(t)), sp.cos(q1(t) + q2(t)), 0],
[ 0, 0, 1]
])
sp.diff(R, t)
Le résultat que SymPy 1.7 donne est le suivant:
