【发布时间】:2018-04-28 16:58:04
【问题描述】:
我试图让 sympy 以引发异常或返回 NaN 的方式在值 x = 0 处评估表达式 x/x。
例如下面的代码:
x = sympy.Symbol("x")
expr = (x/x).subs({x:0}).evalf()
print(expr)
返回 1。这完全是错误的。确实,当 x 接近零时 x/x 的极限是 1,但就 x = 0 时的实际值而言,它是未定义的。我希望 sympy 引发除零异常或返回 NaN,这是数学上正确的答案。
其实问题在我代入x = 0之前就已经存在了:
x = sympy.Symbol("x")
expr = x/x
print(expr)
返回 1。
感谢您提供的任何帮助。
【问题讨论】:
-
我认为
with evaluate(False): expr = x/x; val = expr.subs(x, 0)可能会这样做,但val.evalf()为零,val是0*1/0。这令人不安。 -
我试了
(1/x).subs({'x':0}),结果进了动物园。 -
@wim 对。默认情况下,x 允许为复数。复平面中的 1/0 被理解为复无穷大,在 SymPy 中表示为
zoo(其中oo看起来像无穷大,z 是复变量的传统表示法。) -
谁说的?我从来没有听说过 1/0 被理解为复无穷大。它只是未定义。