¿Cómo decirle a SymPy que una variable es función del tiempo?

Nov 26 2020

Tengo una matriz de rotación 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]
])

Donde q1 y q2, son ángulos. Uno de ellos, q2 (t) es función del tiempo, cambia. ¿Cómo puedo decirle eso a Sympy?

Me gustaría diferenciar esa matriz a lo largo del tiempo, pero no sé cómo hacerlo.

Así lo declaré todo:

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)

Esa es la salida que obtengo de sp.diff(R, t):

Calculé un diferencial de R (por t) a mano y, por lo tanto, me gustaría obtener algo como esto en SymPy:

Respuestas

1 wsdookadr Dec 04 2020 at 23:15

Necesita declarar q1y q2como funciones indefinidas, y luego usarlas en la Rmatriz calculada en el punto 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)

El resultado que da SymPy 1.7 es este: