Sympy 1.11.1分段函数单点定义域取值返回NaN问题咨询
SymPy 1.11.1中Piecewise替换x=0返回NaN的问题解析
问题原因
在SymPy 1.11.1版本里,直接用subs(x, 0)替换Piecewise的条件时,x == 0这个等式不会被自动求值为布尔值True,而是以0 == 0的表达式形式存在。Piecewise需要明确的布尔判断结果来匹配分支,此时前两个条件x < 0和x > 0替换后是False,但第三个条件没有被识别为有效匹配,导致没有符合的分支,最终返回NaN(Piecewise无匹配分支时的默认返回值)。
解决办法
- 强制求值:替换后调用
doit()或evalf()方法,触发条件表达式的布尔求值,比如执行p.subs(x, 0).doit(),就能得到正确结果1。 - 改用Eq函数定义条件:把
x == 0换成Eq(x, 0),修改后的代码如下:
这样替换后from sympy import * x = Symbol("x", real=True) p = Piecewise((0, x < 0), (0, x > 0), (1, Eq(x, 0))) p.subs(x, 0)Eq(0, 0)会被正确识别为True,直接返回1。 - 升级SymPy版本:该bug在SymPy 1.12及以后的版本中已被修复,升级后直接执行原代码就能得到预期结果1。
内容的提问来源于stack exchange,提问作者Charlie
相关产品推荐
相关产品推荐

