Jak powiedzieć SymPy, że zmienna jest funkcją czasu?

Nov 26 2020

Mam taką macierz rotacji 3D:

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

Gdzie q1 i q2 to kąty. Jeden z nich, q2 (t) jest funkcją czasu, zmienia się. Jak mam to powiedzieć sympy?

Chciałbym tę macierz rozróżniać w czasie, ale nie wiem, jak to zrobić.

Tak powiedziałem wszystko:

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)

To wynik, który otrzymuję z sp.diff(R, t):

Ręcznie obliczyłem różnicę z R (na t) i dlatego chciałbym uzyskać coś takiego w SymPy:

Odpowiedzi

1 wsdookadr Dec 04 2020 at 23:15

Musisz zadeklarować q1i q2jako niezdefiniowane funkcje, a następnie użyć ich w Rmacierzy obliczonej w punkcie 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)

Wynik, jaki daje SymPy 1.7, jest następujący: