Como dizer ao SymPy que uma variável é uma função do tempo?

Nov 26 2020

Eu tenho uma matriz de rotação 3D como tal:

R = sp.Matrix([
    [ sp.cos(q1 + q2),  -sp.sin(q1 + q2), 0],
    [-sp.sin(q1 + q2),   sp.cos(q1 + q2), 0],
    [               0,                 0, 1]
])

Onde q1 e q2, são ângulos. Um deles, q2 (t) é função do tempo, ele muda. Como posso saber isso para o sympy?

Gostaria de diferenciar essa matriz ao longo do tempo, mas não sei como fazer isso.

Foi assim que declarei tudo:

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)

Essa é a saída que obtenho de sp.diff(R, t):

Calculei um diferencial de R (por t) manualmente e, portanto, gostaria de obter algo assim no SymPy:

Respostas

1 wsdookadr Dec 04 2020 at 23:15

Você precisa declarar q1e q2como funções indefinidas e, em seguida, usá-las na Rmatriz calculada no ponto 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)

O resultado que o SymPy 1.7 oferece é este: