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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:20:09