Sympy中对积分输出变量执行坐标变换替换操作失效问题求解
SymPy替换积分结果失败的解决方法
核心问题原因
你遇到的替换失效问题和积分执行顺序无关,完全是两个写法错误导致的:
subs方法参数顺序错误:SymPy的subs语法为表达式.subs(待替换的旧符号, 替换后的新内容),你写反了两个参数的位置,要把R替换为坐标表达式,就应该把R放在第一个参数位,新表达式放在第二个参数位。- 存在未声明的符号:你导入SymPy时重命名为
sp,但定义r、R时误用了sym.Symbol,同时坐标变换用到的x、y也没有提前声明为SymPy符号。
修正后的可运行代码
import sympy as sp # 提前声明所有用到的符号 r = sp.Symbol('r') R = sp.Symbol('R') x = sp.Symbol('x') y = sp.Symbol('y') theta00 = sp.pi * sp.exp(-(r**2 - 1)/2) # 积分会先完成计算再赋值给h h = sp.integrate((r**2 / 2) * sp.diff(theta00, r), (r, -sp.oo, R)) # 调整subs参数顺序完成替换 hxy = h.subs(R, sp.sqrt((x - 1)**2 + y**2))
特殊场景补充
如果你后续遇到SymPy没有自动完成解析积分的场景,可以手动调用doit()方法强制计算积分后再替换:
# 强制完成积分计算后执行替换 hxy = h.doit().subs(R, sp.sqrt((x - 1)**2 + y**2))
内容的提问来源于stack exchange,提问作者C.B.
相关产品推荐
相关产品推荐

