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