scipy.special.wrightomega#

scipy.special.wrightomega(z, out=None) = <ufunc 'wrightomega'>#

Wright Omega 函数。

定义为以下方程式的解

\[\omega + \log(\omega) = z\]

\(\log\) 是复数对数的主分支。

参数:
zarray_like

评估 Wright Omega 函数的点

outndarray, 可选

函数值的可选输出数组

返回:
omega标量或 ndarray

Wright Omega 函数的值

另请参见

lambertw

Lambert W 函数

注意

0.19.0 版本中新增。

该函数还可以定义为

\[\omega(z) = W_{K(z)}(e^z)\]

\(K(z) = \lceil (\Im(z) - \pi)/(2\pi) \rceil\) 是解绕次数,\(W\) 是 Lambert W 函数。

此处的实现来自 [1]

引用

[1]

Lawrence、Corless 和 Jeffrey,“算法 917:Wright \(\omega\) 函数的复数双精度评估。”《ACM 数学软件交易》,2012。 DOI:10.1145/2168773.2168779

示例

>>> import numpy as np
>>> from scipy.special import wrightomega, lambertw
>>> wrightomega([-2, -1, 0, 1, 2])
array([0.12002824, 0.27846454, 0.56714329, 1.        , 1.5571456 ])

复数输入

>>> wrightomega(3 + 5j)
(1.5804428632097158+3.8213626783287937j)

验证 wrightomega(z) 满足 w + log(w) = z

>>> w = -5 + 4j
>>> wrightomega(w + np.log(w))
(-5+4j)

验证与 lambertw 的连接

>>> z = 0.5 + 3j
>>> wrightomega(z)
(0.0966015889280649+1.4937828458191993j)
>>> lambertw(np.exp(z))
(0.09660158892806493+1.4937828458191993j)
>>> z = 0.5 + 4j
>>> wrightomega(z)
(-0.3362123489037213+2.282986001579032j)
>>> lambertw(np.exp(z), k=1)
(-0.33621234890372115+2.282986001579032j)