使用 SymPy 将笛卡尔表达式转换为极坐标表达式
Convert Cartesian expression to polar expression using SymPy
有没有办法将 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))
但在这两种情况下,我只是再次收到原始表达式。
有没有办法在 SymPy 中将笛卡尔表达式转换为极坐标表达式?
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()
有没有办法将 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))
但在这两种情况下,我只是再次收到原始表达式。
有没有办法在 SymPy 中将笛卡尔表达式转换为极坐标表达式?
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()