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 q1
e q2
como funções indefinidas e, em seguida, usá-las na R
matriz 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:

O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas