Wie kann man SymPy mitteilen, dass eine Variable eine Funktion der Zeit ist?
Nov 26 2020
Ich habe eine 3D-Rotationsmatrix als solche:
R = sp.Matrix([
[ sp.cos(q1 + q2), -sp.sin(q1 + q2), 0],
[-sp.sin(q1 + q2), sp.cos(q1 + q2), 0],
[ 0, 0, 1]
])

Wobei q1 und q2 Winkel sind. Eines davon, q2 (t), ist eine Funktion der Zeit, es ändert sich. Wie kann ich das zu Sympy sagen?
Ich würde diese Matrix gerne im Laufe der Zeit differenzieren, aber ich weiß nicht, wie ich das machen soll.
So habe ich alles erklärt:
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)
Das ist die Ausgabe, die ich bekomme von sp.diff(R, t)
:

Ich habe ein Differential von R (durch t) von Hand berechnet und möchte daher so etwas in SymPy erhalten:

Antworten
1 wsdookadr Dec 04 2020 at 23:15
Sie müssen q1
und q2
als undefinierte Funktionen deklarieren und sie dann in der R
am Punkt berechneten Matrix verwenden 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)
Das Ergebnis von SymPy 1.7 lautet:
