scipy.special.lambertw

scipy.special.lambertw(z, k=0, tol=1e-8)[源代码]

Lambert W函数。

Lambert W函数 W(z) 被定义为的反函数 w * exp(w) 。换句话说, W(z) 是这样的吗? z = W(z) * exp(W(z)) 对于任何复数 z

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

参数
zarray_like

输入参数。

k整型,可选

分支索引。

tol浮动,可选

评估公差。

退货
w阵列

w 将具有与以下内容相同的形状 z

参见

wrightomega

Wright Omega函数

注意事项

所有分支机构均由 lambertw

  • lambertw(z) 给出主要解决方案(分支0)

  • lambertw(z, k) gives the solution on branch k

Lambert W函数有两个部分实数分支:主分支 (k = 0 )是真的是真的 z > -1/e ,以及 k = -1 分支是真实的 -1/e < z < 0 。所有分支机构,除 k = 0 在处有对数奇点 z = 0

可能出现的问题

在离分支点非常近的地方,评估可能会变得不准确 -1/e 。在某些角落的案例中, lambertw 可能当前无法收敛,或者可能最终出现在错误的分支上。

Algorithm

哈雷迭代法用于反演 w * exp(w) ,使用一阶渐近近似(O(log(W))或 O(w) )作为初步估计。

分支机构的定义、实施和选择基于 [2].

参考文献

1

https://en.wikipedia.org/wiki/Lambert_W_function

2

Corless等人,“On the Lambert W Function”,Adv.Comp.数学课。5(1996)329-359。https://cs.uwaterloo.ca/research/tr/1993/03/W.pdf

示例

Lambert W函数是 w exp(w)

>>> 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)

Applications to equation-solving

Lambert W函数可用于求解各种方程,如求无穷大功率塔的值 \(z^{{z^{{z^{{\ldots}}}}}}\)

>>> 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)