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ć q1
i q2
jako niezdefiniowane funkcje, a następnie użyć ich w R
macierzy 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:
