lambertw#
- scipy.special.lambertw(z, k=0, tol=1e-8)[source]#
- Lambert W function. - The Lambert W function W(z) is defined as the inverse function of - w * exp(w). In other words, the value of- W(z)is such that- z = W(z) * exp(W(z))for any complex number- z.- The Lambert W function is a multivalued function with infinitely many branches. Each branch gives a separate solution of the equation - z = w exp(w). Here, the branches are indexed by the integer k.- Parameters:
- zarray_like
- Input argument. 
- kint, optional
- Branch index. 
- tolfloat, optional
- Evaluation tolerance. 
 
- Returns:
- warray
- w will have the same shape as z. 
 
 - See also - wrightomega
- the Wright Omega function 
 - Notes - All branches are supported by - lambertw:- lambertw(z)gives the principal solution (branch 0)
- lambertw(z, k)gives the solution on branch k
 - The Lambert W function has two partially real branches: the principal branch (k = 0) is real for real - z > -1/e, and the- k = -1branch is real for- -1/e < z < 0. All branches except- k = 0have a logarithmic singularity at- z = 0.- Possible issues - The evaluation can become inaccurate very close to the branch point at - -1/e. In some corner cases,- lambertwmight currently fail to converge, or can end up on the wrong branch.- Algorithm - Halley’s iteration is used to invert - w * exp(w), using a first-order asymptotic approximation (O(log(w)) or O(w)) as the initial estimate.- The definition, implementation and choice of branches is based on [2]. - References [2]- Corless et al, “On the Lambert W function”, Adv. Comp. Math. 5 (1996) 329-359. https://cs.uwaterloo.ca/research/tr/1993/03/W.pdf - Examples - The Lambert W function is the inverse of - 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) - Any branch gives a valid inverse: - >>> w = lambertw(1, k=3) >>> w (-2.8535817554090377+17.113535539412148j) >>> w*np.exp(w) (1.0000000000000002+1.609823385706477e-15j) - Applications to equation-solving - The Lambert W function may be used to solve various kinds of equations. We give two examples here. - First, the function can be used to solve implicit equations of the form - \(x = a + b e^{c x}\) - for \(x\). We assume \(c\) is not zero. After a little algebra, the equation may be written - \(z e^z = -b c e^{a c}\) - where \(z = c (a - x)\). \(z\) may then be expressed using the Lambert W function - \(z = W(-b c e^{a c})\) - giving - \(x = a - W(-b c e^{a c})/c\) - For example, - >>> a = 3 >>> b = 2 >>> c = -0.5 - The solution to \(x = a + b e^{c x}\) is: - >>> x = a - lambertw(-b*c*np.exp(a*c))/c >>> x (3.3707498368978794+0j) - Verify that it solves the equation: - >>> a + b*np.exp(c*x) (3.37074983689788+0j) - The Lambert W function may also be used find the value of the infinite power tower \(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)