Sympy中求表达式负无穷极限返回nan而非-pi/4的问题排查
问题排查:SymPy计算极限返回NaN的原因及解决方法
问题描述
使用SymPy计算表达式atan((1-x)/(x+3))在x趋向负无穷时的极限,代码运行返回nan,但正确结果应为-π/4。原代码如下:
import sympy as sp sp.init_printing(use_unicode=True) x = sp.Symbol('x', real=True) expr = sp.atan((1-x)/(x+3)) sp.pprint(sp.limit(expr, x, -sp.oo))
原因分析
问题出在旧版本SymPy对分式极限的符号处理逻辑上:
- 当x趋向负无穷时,分式
(1-x)/(x+3)的极限为-1,理论上atan(-1)的结果是-π/4。 - 但旧版本SymPy在计算时,未能正确识别分式趋向
-1的明确符号,导致atan函数的极限计算返回nan。
解决办法
有两种可行的修复方式:
方式1:手动化简表达式
利用atan是奇函数的性质(atan(-a) = -atan(a)),先改写表达式再计算极限:
import sympy as sp sp.init_printing(use_unicode=True) x = sp.Symbol('x', real=True) # 手动化简:将原式转换为-atan((x-1)/(x+3)) expr = -sp.atan((x-1)/(x+3)) sp.pprint(sp.limit(expr, x, -sp.oo)) # 输出:-π/4
方式2:升级SymPy版本
新版本的SymPy(如1.10及以上)已修复该符号处理问题,直接运行原代码即可得到正确结果-π/4。
内容的提问来源于stack exchange,提问作者PCA
相关产品推荐
相关产品推荐

