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 q1et en q2tant que fonctions non définies, puis les utiliser dans la Rmatrice 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: