2016-08-01 11 views
2

ich ein Stück Code zu schreiben, aber das Problem gefunden hier:Differenzierung, .diff() gibt nicht erwartete Ausgabe

[IN>] from sympy import* 

[IN>] t= Symbol('t') 
     x1 = Function('x1')(t) 
     x2 = Function('x2')(t) 
     y1 = Function('y1')(t) 
     y2 = Function('y2')(t) 

definiere ich meinen Ausdruck:

[IN>] f = (x1.diff(t)*y2.diff(t)- x2.diff(t)*y1.diff(t)) 

Dann bei der Differenzierung der Ausdruck f wrt. die Faktoren des ersten Summanden bekomme ich die unerwartete Ausgabe:

[IN>] f.diff(y2.diff(t)) 

[OUT>] Subs(Derivative(x1(t), t), (_xi_2,), (Derivative(y2(t), t),)) 

aber wenn ich WRT unterscheiden. der zweite Summand Faktoren

[IN>] f.diff(y1.diff(t)) 

[OUT>] -Derivative(x2(t), t) 

ich die gewünschte und erwartet Ergebnis. Ich bin total verblüfft. Noch mehr, wenn ich die Reihenfolge der Summanden ändern, erhalte ich das gleiche Ergebnis:

[IN>] (-x2.diff(t)*y1.diff(t)+x1.diff(t)*y2.diff(t)).diff(y2.diff(t)) 

[OUT>] Subs(Derivative(x1(t), t), (_xi_2,), (Derivative(y2(t), t),)) 

[IN>] (-x2.diff(t)*y1.diff(t)+x1.diff(t)*y2.diff(t)).diff(y1.diff(t)) 

[OUT>] -Derivative(x2(t), t) 

Aber wenn ich das Minus `-``sign, die propeblem ist jetzt in dem anderen Paar von Funktionen austauschen:

[IN>] (+x2.diff(t)*y1.diff(t)-x1.diff(t)*y2.diff(t)).diff(y1.diff(t)) 

[OUT>] Subs(Derivative(x2(t), t), (_xi_2,), (Derivative(y1(t), t),)) 
+0

@Mitch: Ich hatte ein Problem mit meiner Verbindung und legte die Frage zu früh. – iiqof

+0

'doit' ist deine Antwort, aber ich würde dies als Fehler in SymPy betrachten. Siehe https://github.com/sympy/sympy/issues/11467. – asmeurer

+0

@asmeurer Ich dachte, das könnte ein Problem sein. Danke, dass du es weitergebracht hast! – iiqof

Antwort

0

Ok, das gewünschten Ergebnis erreiche ich ad hatte nur .doit(), wie es meint die Subs() Funktion zurückkehrt.

(+x2.diff(t)*y1.diff(t)-x1.diff(t)*y2.diff(t)).diff(y1.diff(t)).doit() 

Derivative(x2(t), t) 
Verwandte Themen