scipy.special.wrightomega#

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

Wright Omega function.

Defined as the solution to

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

where \(\log\) is the principal branch of the complex logarithm.

Parameters
zarray_like

Points at which to evaluate the Wright Omega function

outndarray, optional

Optional output array for the function values

Returns
omegascalar or ndarray

Values of the Wright Omega function

See also

lambertw

The Lambert W function

Notes

New in version 0.19.0.

The function can also be defined as

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

where \(K(z) = \lceil (\Im(z) - \pi)/(2\pi) \rceil\) is the unwinding number and \(W\) is the Lambert W function.

The implementation here is taken from [1].

References

1

Lawrence, Corless, and Jeffrey, “Algorithm 917: Complex Double-Precision Evaluation of the Wright \(\omega\) Function.” ACM Transactions on Mathematical Software, 2012. DOI:10.1145/2168773.2168779.

Examples

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

Complex input:

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

Verify that wrightomega(z) satisfies w + log(w) = z:

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

Verify the connection to 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)