You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 07:45:03