Как заставить sympy признать, что 0/0 деление на ноль - PullRequest
0 голосов
/ 28 апреля 2018

Я пытаюсь заставить syy оценить выражение x / x по значению x = 0 таким образом, что оно вызывает исключение или возвращает NaN.

Например, следующий код:

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

возвращает 1. Это просто ложь. Это правда, что предел х / х при приближении х к нулю равен 1, но с точки зрения его фактического значения при х = 0 он не определен. Я хочу, чтобы симпати поднял исключение деления на ноль или вернул NaN, что является математически правильным ответом.

На самом деле проблема существует уже до того, как я подставлю x = 0:

x = sympy.Symbol("x")
expr = x/x
print(expr)

Возвращает 1.

Спасибо за любую помощь, которую вы можете оказать.

1 Ответ

0 голосов
/ 28 апреля 2018

Как вы заметили, проблема в том, что x/x сразу оценивается в 1, поэтому последующая замена x на 0 в действительности не происходит.

Чтобы избежать оценки, нужно передать оценку = ложный флаг произведению х с 1 / x:

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

Результатом является «Не число», что означает, что оно не оценивается как число.

(В SymPy все деление умножается на взаимное количество: есть Add, Mul, Pow, но нет Div или Sub).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...