Sympy возвращает значения NaN при подстановке бесконечности в выражение - PullRequest
0 голосов
/ 03 октября 2019

Я пытаюсь использовать Sympy , чтобы показать, что происходит с терминами в матрице как переменная t стремится к бесконечности.

Например.

from sympy import *
t = Symbol('t')
exp(-t).subs({t: oo})

возвращает 0, что является правильным, а

exp(t).subs({t: oo})

возвращает oo (бесконечность), что также правильно.

Однако некоторые выражения возвращают nan. Например:

(t*exp(-t)).subs({t: oo})

Я почти уверен, что приведенное выше выражение должно вернуть 0. (N(100*exp(-100)) возвращает 3.72007597602084e-42).

Это ошибка или действительно «не число»?

1 Ответ

2 голосов
/ 03 октября 2019

Если у вас есть oo*0, результат будет NaN. Для некоторых выражений, таких как x**2*exp(-x), может быть четко определенный предел, поскольку x обращается в бесконечность. Но если SymPy не знает, что такое выражение, он не может знать, как оценить oo*0. Рассмотрим следующее (все примеры 0*oo):

In [1]: (x*exp(-x)).limit(x, oo)                                                                                                                              
Out[1]: 0

In [2]: (x**2*exp(-x)).limit(x, oo)                                                                                                                           
Out[2]: 0

In [3]: (factorial(x)*exp(-x)).limit(x, oo)                                                                                                                   
Out[3]: ∞

In [4]: (exp(x)*exp(-x)).limit(x, oo)                                                                                                                         
Out[4]: 1

Если вы хотите рассчитать четко определенный предел, используйте функцию / метод limit. В противном случае 0*oo не является четко определенным, поэтому он будет иметь значение NaN.

...