2017-02-05 2 views
1

Betrachten Sie die Parametrierung für einen Kreis gegeben durchTrenn Variablen in Gleichungssystem mit Sympy

import sympy as sp 
sp.var('x,y,theta,r') 
e1 = sp.Eq(r, sp.sqrt(x**2 + y**2)) 
e2 = sp.Eq(theta, sp.atan2(y,x)) 

Wie erhalte ich Sympy mir die gleiche Sache zu geben, aber in Bezug auf x und y? Das heißt, ich möchte dies:

x = r*cos(theta) 
y = r*sin(theta) 

Aber wenn ich Sympy verwenden lösen, was ich bekommen ist

[(-sqrt(r**2*cos(theta)**2), sqrt(r**2)*sin(theta)), 
(sqrt(r**2*cos(theta)**2), sqrt(r**2)*sin(theta))] 

Selbst wenn ich, wenn die zweite Lösung, ich kann immer noch nicht Sympy sqrt(r**2) für r vereinfachen machen.

Dank

+0

'sqrt (r ** 2)' * nicht * gleich 'r', im Allgemeinen vereinfachen . Siehe die Diskussion [hier] (http://docs.sympy.org/dev/tutorial/simplification.html#powers) (insbesondere Identität 3) – Stelios

+0

@Stelios Ja, aber es tut in diesem Fall. Also würde ich gerne wissen, wie ich Sympy sage, dass x und y real sind, so dass r immer positiv ist. – TomCho

+0

Definieren Sie Ihre Symbole als 'r = sp.symbols ('r', positiv = Wahr)' und 'x, y = sp.symbols ('x, y', real = True) ', anstatt' var' zu verwenden, was bedeutet, dass die Symbole komplexwertig sind. – Stelios

Antwort

0

solve (oder die neuere solveset) ist, was Sie Variablen isolieren wollen.

Wie bereits in den Kommentaren heraus, müssen Sie r als positiv für sqrt(r**2) einstellen zu r

r = symbols('r', positive=True) 
Verwandte Themen