You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

用SymPy将笛卡尔表达式转换为极坐标表达式的正确方法

嘿,当然可以用SymPy搞定这个转换呀!你之前的subs用法踩了两个小坑,我来帮你捋清楚正确的实现方式~

首先先分析下你之前的问题:

  • 第一种subs写法,虽然代入了x和y的极坐标形式,但没有调用化简函数,SymPy不会自动帮你把sqrt(r²cos²θ + r²sin²θ)简化成r;
  • 第二种subs写法不仅参数格式错误,替换逻辑也不对——你把sqrt(x²+y²)换成atan(y/x)完全不匹配,前者对应极坐标的r,后者对应theta,这俩根本不是一回事儿。

方法一:代入极坐标关系后化简

这是最通用的方法,适合任何笛卡尔表达式转极坐标:

import sympy as sp

# 定义所需符号
x, y, r, theta = sp.symbols('x y r theta')
# 你的笛卡尔表达式
expr = 1 / sp.sqrt(x**2 + y**2)

# 代入x=r*cosθ、y=r*sinθ,然后调用simplify化简
polar_expr = expr.subs({x: r*sp.cos(theta), y: r*sp.sin(theta)}).simplify()
print(polar_expr)  # 输出结果就是1/r

SymPy会自动利用三角恒等式cos²θ + sin²θ = 1,把分母的sqrt(r²(cos²θ+sin²θ))简化为r,最终得到你想要的1/r

方法二:直接替换核心项

因为你的表达式正好是1/sqrt(x²+y²),而sqrt(x²+y²)本身就是极坐标里的r,所以可以直接替换这个核心项,一步到位:

import sympy as sp

x, y, r = sp.symbols('x y r')
expr = 1 / sp.sqrt(x**2 + y**2)

# 直接把sqrt(x²+y²)替换成r
polar_expr = expr.subs(sp.sqrt(x**2 + y**2), r)
print(polar_expr)  # 直接输出1/r

这种方式更简洁,适合表达式结构和极坐标变量直接对应的场景。

内容的提问来源于stack exchange,提问作者Linde

火山引擎 最新活动