使用SymPy将笛卡尔表达式转换为极坐标表达式

时间:2018-04-21 15:44:20

标签: python-3.x expression sympy polar-coordinates

有没有办法将SymPy中的笛卡尔表达式转换为极坐标? 我有以下表达式:

1 / SQRT(X ^ 2 + Y ^ 2)

然而,我似乎无法让SymPy承认这是极坐标中的1 / r。我尝试使用' subs'命令,以下两个选项(我将sympy作为asp导入,并在之前定义了所有符号):

expr = 1/sp.sqrt(x**2+y**2)
expr.subs((x,y),(r*cos(theta),r*sin(theta))
expr.subs((sp.sqrt(x**2+y**2),sp.atan(y/x)),(r,theta))

但在这两种情况下,我只是再次收到原始的expr。

有没有办法在SymPy中将笛卡尔表达式转换为极坐标?

1 个答案:

答案 0 :(得分:0)

subs((x,y),(r*cos(theta),r*sin(theta))

不是subs的正确语法。当要替换多个符号时,必须提供字典

subs({x: r*sp.cos(theta), y: r*sp.sin(theta)})

或其中包含对(旧,新)的可迭代:

subs(((x, r*sp.cos(theta)), (y, r*sp.sin(theta))))

前者更具可读性;当必须以特定顺序进行替换时,需要后者(这里不是这种情况)。

无论哪种方式,要实现1 / r,您还需要将r声明为非负的

r = sp.symbols('r', nonnegative=True)

并简化替换结果:

expr.subs({x: r*sp.cos(theta), y: r*sp.sin(theta)}).simplify()