如何使同情承认0/0是除零

时间:2018-04-28 16:58:05

标签: python sympy

我试图让sympy在值x = 0处评估表达式x / x,以便引发异常或返回NaN。

例如,以下代码:

x = sympy.Symbol("x")
expr = (x/x).subs({x:0}).evalf()
print(expr)

返回1.这完全是假的。确实,当x接近零时x / x的极限是1,但就x = 0时的实际值而言,它是未定义的。我想要同意提出一个除零异常或返回NaN,这是数学上正确的答案。

事实上,在我替换x = 0:

之前,问题已经存在
x = sympy.Symbol("x")
expr = x/x
print(expr)

返回1。

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

正如您所注意到的,问题是x/x立即求值为1,因此后续将x替换为0并非真正发生。

避免评估的一种方法是将evaluate = False标志传递给x与1 / x的乘积:

>>> expr = Mul(x, 1/x, evaluate=False)
>>> expr
x/x
>>> expr.subs(x, 0)
nan    

结果是“非数字”,这意味着这不会评估为数字。

(在SymPy中,所有除法都是乘以倒数:有Add,Mul,Pow但没有Div或Sub)。