当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python SciPy special.lambertw用法及代码示例


本文简要介绍 python 语言中 scipy.special.lambertw 的用法。

用法:

scipy.special.lambertw(z, k=0, tol=1e-8)#

朗伯 W 函数。

朗伯 W 函数W(z)被定义为的反函数w * exp(w).换句话说,值W(z)是这样的z = W(z) * exp(W(z))对于任何复数z.

Lambert W 函数是具有无限多个分支的多值函数。每个分支给出方程的单独解z = w exp(w).这里,分支由整数索引k.

参数

z array_like

输入参数。

k 整数,可选

分支索引。

tol 浮点数,可选

评估容差。

返回

w 数组

w 将具有与 z 相同的形状。

注意

lambertw 支持所有分支:

  • lambertw(z) 给出主解(分支 0)

  • lambertw(z, k)在分支上给出解决方案k

Lambert W 函数有两个部分实数分支:主分支 (k = 0) 是真的z > -1/e, 和k = -1分支是真实的-1/e < z < 0.除k = 0有对数奇点z = 0.

可能的问题

在非常接近 -1/e 处的分支点时,评估可能会变得不准确。在某些极端情况下,lambertw 当前可能无法收敛,或者可能最终出现在错误的分支上。

算法

哈雷迭代用于反转w * exp(w), 使用 first-order 渐近逼近 (O(log(w)) 或O(w)) 作为初始估计。

分支的定义、实现和选择基于[2]。

参考

[2]

Corless 等人,“关于 Lambert W 函数”,Adv.比较。数学。 5 (1996) 329-359。 https://cs.uwaterloo.ca/research/tr/1993/03/W.pdf

例子

Lambert W 函数是 w exp(w) 的倒数:

>>> import numpy as np
>>> from scipy.special import lambertw
>>> w = lambertw(1)
>>> w
(0.56714329040978384+0j)
>>> w * np.exp(w)
(1.0+0j)

任何分支都会给出有效的逆:

>>> w = lambertw(1, k=3)
>>> w
(-2.8535817554090377+17.113535539412148j)
>>> w*np.exp(w)
(1.0000000000000002+1.609823385706477e-15j)

申请equation-solving

Lambert W 函数可用于求解各种方程。我们在这里举两个例子。

首先,该函数可用于求解以下形式的隐式方程

对于 。我们假设 不为零。经过一点代数之后,方程可以写成

其中 可以使用 Lambert W 函数来表示

给予

例如,

>>> a = 3
>>> b = 2
>>> c = -0.5

的解决方案是:

>>> x = a - lambertw(-b*c*np.exp(a*c))/c
>>> x
(3.3707498368978794+0j)

验证它是否解方程:

>>> a + b*np.exp(c*x)
(3.37074983689788+0j)

Lambert W 函数也可用于查找无限功率塔 的值:

>>> def tower(z, n):
...     if n == 0:
...         return z
...     return z ** tower(z, n-1)
...
>>> tower(0.5, 100)
0.641185744504986
>>> -lambertw(-np.log(0.5)) / np.log(0.5)
(0.64118574450498589+0j)

相关用法


注:本文由纯净天空筛选整理自scipy.org大神的英文原创作品 scipy.special.lambertw。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。