有没有办法将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中将笛卡尔表达式转换为极坐标?
答案 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()