【问题标题】:Sympy returning NaN values when substituting infinity into expression将无穷大代入表达式时,Sympy 返回 NaN 值
【发布时间】:2020-02-01 05:50:14
【问题描述】:

我正在尝试使用 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)。

这是一个错误还是真的“不是数字”?

【问题讨论】:

    标签: python sympy nan exponent infinity


    【解决方案1】:

    当您有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。

    【讨论】:

    • 太好了,谢谢。这适用于单个表达式。有没有办法做到M.limit(t, oo) 其中M 是一个矩阵? (我尝试了limit(M, t, oo) 并得到了NotImplementedError: Don't know how to calculate the mrv of 'Matrix...)。
    • 我在使用限制方法M.limit(x, oo)时没有得到那个错误@
    • 奇怪的是,我自己现在没有错误。不用担心,谢谢,这是我认为的正确答案。
    猜你喜欢
    • 1970-01-01
    • 2016-11-16
    • 2019-10-11
    • 1970-01-01
    • 2013-10-22
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    相关资源
    最近更新 更多