【问题标题】:Limit does not evaluate power function限制不评估幂函数
【发布时间】:2017-01-27 16:49:01
【问题描述】:

我正在尝试使用 sympy 进行相对简单的限制:

from sympy import *
f,k,b = symbols('f k b')
test = f**b - k**b
limit(test,k,f)

我期待 0,但我得到:

>>> limit(test,k,f)
f**b - exp(b*log(f))

在数学上这是正确的(并且为零),但为什么它的计算结果不为零?

请注意我是否定义:

from sympy import *
f,k,b = symbols('f k b')
test = exp(b*log(f)) - exp(b*log(k))
limit(test,k,f)

然后我得到零。

【问题讨论】:

    标签: limit sympy


    【解决方案1】:

    通常断言限制为零是不正确的。考虑 Python 控制台中的以下计算:

    >>> (-1)**(1/2)
    (6.123233995736766e-17+1j)
    >>> (-1 - 1e-15j)**(1/2)
    (5.053215498074303e-16-1j)
    

    由于复平方根沿负实轴的分支切割,基数非常接近的两个值产生了完全不同的结果(差异约为 2j)。

    如果我们坚持正基数和实数指数,极限确实为零

    from sympy import *
    k = symbols('k')
    f = symbols('f', positive=True)
    b = symbols('b', real=True)
    test = f**b - k**b
    limit(test,k,f)   # returns 0 
    

    【讨论】:

    • 很高兴接受这个答案,因为它解决了我的问题。感谢您花时间回答。我有点不确定这个解释。在我的第二个示例中,当我编写 test = exp(blog(f)) - exp(blog(k)) 时,sympy 确实将限制评估为零。但是关于分支削减的问题似乎也适用于此。例如。 b=1/2、f=-1 和 k=-1-I*eps 其中 eps 为正数且接近于零。那么,由于对数的分支切割,term1 = +I and term2->-I?所以看起来极限并不总是零(取决于复平面 k 接近 f 的方向),但 sympy 给出了零。
    • 是的,对于 exp(b*log(f)) 的限制返回 0 通常是不正确的结果,因为采用限制的点可能是分支切割点。显然,SymPy 用于评估限制的算法并没有完全意识到分支切割。
    • 请注意,limit 计算实际限制(默认从右侧接近)。未实施复杂的限制。
    猜你喜欢
    • 2015-08-02
    • 2015-12-01
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多