2017-02-05 51 views
1

方程组的隔离变量考虑与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)) 

给出了一圈参数如何获得Sympy给我同样的事情,但在xy方面?也就是说,我想这一点:

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

但是当我使用Sympy解决我所得到的是

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

即使当第二方案,我还是不能让我Sympy简化sqrt(r**2)r

感谢

+0

'开方(R ** 2)'*不*等于'r',在一般情况。请参阅[这里]的讨论(http://docs.sympy.org/dev/tutorial/simplification.html#powers)(特别是标识3) – Stelios

+0

@Stelios是的,但它在这种情况下。所以我想知道我如何告诉Sympy x和y是真实的,所以r总是正数 – TomCho

+0

定义符号为'r = sp.symbols('r',positive = True)'和'x,y = sp.symbols('x,y',real = True)',而不是使用'var'这意味着这些符号是复数值。 – Stelios

回答

0

solve(或较新的solveset)是要隔离的变量是什么。

正如评论指出的那样,你需要设置r为阳性sqrt(r**2)来简化r

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