10

4

9

6

# LambertW

### Lambert W function and associated omega constant

Linux, OSX:   Windows:

### lambertw

The Lambert W function, also called the omega function or product logarithm.

``````lambertw(z,k)   # Lambert W function for argument z and branch index k
lambertw(z)     # the same as lambertw(z,0)
``````

`z` may be Complex or Real. `k` must be an integer. For Real `z`, `k` must be either `0` or `-1`.

Examples:

``````julia> lambertw(10)
1.7455280027406994

julia> lambertw(e)
1

julia> lambertw(1.0)
0.5671432904097838

julia> lambertw(-pi/2 + 0im)  / pi
4.6681174759251105e-18 + 0.5im
``````

### lambertwbp(x,k=0)

Return `1 + W(-1/e + z)`, for `z` satisfying `0 <= abs(z) < 1/e`, on the branch of index `k`, where `k` must be either `0` or `-1`. This function is designed to minimize loss of precision near the branch point `z=-1/e`. `lambertwbp(z,k)` converges to `Float64` precision for `abs(z) < 0.32`.

If `k=-1` and `imag(z) < 0`, the value on the branch `k=1` is returned.

``````julia> lambertwbp(1e-3,-1)
-0.07560894118662498

julia> lambertwbp(0)
-0.0
``````

`lambertwbp` uses a series expansion about the branch point `z=-1/e`. The loss of precision in `lambertw` is analogous to the loss of precision in computing the `sqrt(1-x)` for `x` close to `1`.

### LambertW.finv(lambertw)

The functional inverse of the Lambert W function.

``````julia> finv(lambertw)(lambertw(1.0))
1.0

julia> finv(lambertw)(lambertw(1+im/2,3))
1.0 + 0.49999999999999944im
``````

### omega constant

``````julia> ω
ω = 0.5671432904097...

julia> omega
ω = 0.5671432904097...

julia> ω * exp(ω)
1.0

julia> big(ω)
5.67143290409783872999968662210355549753815787186512508135131079223045793086683e-01 with 256 bits of precision

julia> lambertw(1) == float(ω)
true
``````

01/04/2015