ProductLog[z]
gives the principal solution for w in
.
ProductLog[k,z]
gives the k
solution.
ProductLog
ProductLog[z]
gives the principal solution for w in
.
ProductLog[k,z]
gives the k
solution.
Details
- Mathematical function, suitable for both symbolic and numerical manipulation.
- The solutions are ordered according to their imaginary parts.
- For
, ProductLog[z] is real. - ProductLog[z] satisfies the differential equation
. - For certain special arguments, ProductLog automatically evaluates to exact values.
- ProductLog can be evaluated to arbitrary numerical precision.
- ProductLog automatically threads over lists. »
- ProductLog[z] has a branch cut discontinuity in the complex z plane running from
to
. - ProductLog[k,z] allows k to be any integer, with
corresponding to the principal solution. - ProductLog[k,z] for integer
has a branch cut discontinuity from
to 0. - ProductLog can be used with Interval and CenteredInterval objects. »
Examples
open all close allBasic Examples (6)
ProductLog[-1.5]Plot over a subset of the reals:
Plot[ProductLog[x], {x, -1 / E, 1}]Plot over a subset of the complexes:
ComplexPlot3D[ProductLog[z], {z, -2 - 2I, 2 + 2I}, PlotLegends -> Automatic]Series expansion at the origin:
Series[ProductLog[x], {x, 0, 5}]Asymptotic expansions at Infinity:
Series[ProductLog[x], {x, ∞, 1}]//FullSimplifyAsymptotic expansions at a singular point:
Series[ProductLog[x], {x, -1 / E, 3}]//FullSimplifyScope (36)
Numerical Evaluation (6)
ProductLog[2.5]N[ProductLog[1 / 3], 100]The precision of the output tracks the precision of the input:
ProductLog[1.3333333333333333333333333]ProductLog[1 + 3.5 I]Evaluate efficiently at high precision:
ProductLog[7 / 3`100]//TimingProductLog[5 / 11`10000];//TimingCompute the elementwise values of an array using automatic threading:
ProductLog[{{-Pi / 2, 0}, {E, -1 / E}}]Or compute the matrix ProductLog function using MatrixFunction:
MatrixFunction[ProductLog[#]&, {{-Pi / 2, 0}, {E, -1 / E}}]ProductLog can be used with Interval and CenteredInterval objects:
ProductLog[Interval[{1.9, 2.1}]]ProductLog[CenteredInterval[4, 1 / 10]]ProductLog[CenteredInterval[1 - 5I, (1 + I) / 10]]Specific Values (4)
Values of ProductLog at fixed points:
Table[ProductLog[n ], {n, {-Pi / 2, E, -1 / E}}]ProductLog[0]ProductLog[1, 0]ProductLog[ComplexInfinity]ProductLog[Infinity]Find a value of x for which the ProductLog[x]=0.5 using FindRoot:
xval = x /. FindRoot[ProductLog[x] == 0.5, {x, 0.1}]Plot[ProductLog[x], {x, -1 / E, 2E}, Epilog -> Style[Point[{xval, ProductLog[xval]}], PointSize[Large], Red]]Visualization (3)
Plot the ProductLog function:
Plot[ProductLog[x], {x, 0, 4}]ComplexContourPlot[Re[ProductLog[z]], {z, -3 - 3 I, 3 + 3 I}, IconizedObject[«PlotOptions»]]ComplexContourPlot[Im[ProductLog[z]], {z, -3 - 3 I, 3 + 3 I}, IconizedObject[«PlotOptions»]]PolarPlot[ProductLog[ϕ], {ϕ, 0, 12π}, Frame -> True]Function Properties (10)
ProductLog is defined for all real values from the interval [-
,∞):
FunctionDomain[ProductLog[x], x]ProductLog is defined for all complex values:
FunctionDomain[ProductLog[z], z, Complexes]The two-argument form
requires that
be an integer and
:
FunctionDomain[ProductLog[k, z], z, Complexes]FunctionRange[ProductLog[x], x, y]ProductLog is not an analytic function:
FunctionAnalytic[ProductLog[x], x]FunctionMeromorphic[ProductLog[x], x]ProductLog is increasing on its real domain:
FunctionMonotonicity[{ProductLog[x], x ≥ -1 / E}, x, StrictInequalities -> True]ProductLog is injective:
FunctionInjective[ProductLog[x], x]Plot[{ProductLog[x], .3}, {x, -1 / E, 1}]ProductLog is not surjective:
FunctionSurjective[ProductLog[x], x]Plot[{ProductLog[x], -2}, {x, -2, 10}]ProductLog is neither non-negative nor non-positive:
FunctionSign[{ProductLog[x], x > -1 / E}, x]ProductLog has both singularity and discontinuity in (-∞,-
]:
FunctionSingularities[ProductLog[x], x]FunctionDiscontinuities[ProductLog[x], x]ProductLog is concave on its real domain:
FunctionConvexity[{ProductLog[x], x ≥ -1 / E}, x]TraditionalForm formatting:
ProductLog[z]//TraditionalFormProductLog[k, z]//TraditionalFormDifferentiation (3)
The first derivative with respect to z:
D[ProductLog[z], z]Higher derivatives with respect to z:
Table[D[ProductLog[z], {z, k}], {k, 1, 3}]//FullSimplifyPlot the higher derivatives with respect to z:
Plot[%, {z, -2 / E, 1}, PlotLegends -> {"First Derivative", "Second Derivative", "Third Derivative"}]Derivative of a nested logarithmic function:
D[ProductLog[ProductLog[x]], x]Integration (3)
Compute the indefinite integral using Integrate:
Integrate[ProductLog[x], x]// FullSimplifyFullSimplify[D[%, x]]// FullSimplifyDefinite integral of ProductLog:
Integrate[ProductLog[x], {x, 0, 10}]Integrate[x ProductLog[x], {x, 0, 1}]Integrate[ProductLog[x] x ^ a, x]// FullSimplifySeries Expansions (5)
Find the Taylor expansions using Series:
Series[ProductLog[x], {x, 0, 5}]Plots of the first three approximations around
:
terms = Normal@Table[Series[ProductLog[x], {x, 0, m}], {m, 1, 5, 2}];
Plot[{ProductLog[x], terms}, {x, 0, 10}, PlotRange -> {{0, 5}, {0, 3}}]Series[ProductLog[1, x], {x, 0, 2}] // FullSimplifyThe general term in the series expansion using SeriesCoefficient:
SeriesCoefficient[ProductLog[x], {x, 0, n}]Find the series expansion at Infinity:
Series[ProductLog[x], {x, Infinity, 0}]Find series expansions at branch points and branch cuts:
Series[ProductLog[x], {x, -1 / E, 2}]The series expansion at infinity contains nested logarithms:
Series[ProductLog[x], {x, Infinity, 0}]//NormalFunction Identities and Simplifications (2)
ProductLog gives the solution for the following equation:
Solve[z == W Power[E, W]]//QuietExpand assuming real variables x and y:
ComplexExpand[ProductLog[x + I y]]Generalizations & Extensions (3)
Evaluate numerically on different sheets of the Riemann surface:
Table[ProductLog[k, 2.3], {k, -2, 2}]Find series expansions at branch points and branch cuts:
Series[ProductLog[2, x], {x, 0, 0}]The branch points and branch cuts are different for
:
Table[Plot3D[Im[ProductLog[k, x + I y]], {x, -2, 2}, {y, -2, 2}, ImageSize -> Small], {k, 0, 1}]Applications (11)
Solve an equation in terms of ProductLog:
Reduce[Exp[x] == x, x]Plot the real and imaginary parts of ProductLog:
Plot[Evaluate[Table[{Re[ProductLog[k, x]], Im[ProductLog[k, x]]}, {k, -1, 1}]], {x, -2, 2}, PlotStyle -> Thick]Plot the Riemann surface of ProductLog:
ParametricPlot3D[{Re[(u + I v)Exp[u + I v]], Im[(u + I v)Exp[u + I v]], v}, {u, -3, 3}, {v, -5, 5}, BoxRatios -> {1, 1, 3 / 2}]Solve[x^w == w, w]Compare the exact result with explicit iterations for
:
With[{x = N[Pi / 4, 25]},
{-(ProductLog[-Log[x]]/Log[x]), Nest[Power[x, #]&, x, 1000]}]Determine the number of labeled unrooted trees from the generating function:
Assuming[n∈Integers && n ≥ 1,
n! SeriesCoefficient[-ProductLog[-x], {x, 0, n}]//Simplify]Table[%, {n, 1, 10}]Solve the Lotka–Volterra equations:
DSolve[{x'[t] == α x[t] (1 - y[t]), y'[t] == β y[t] (1 - x[t])}, {x, y}, t]Find the frequency of the maximum of the Planck blackbody spectrum:
Reduce[D[(8π/c^3)(f ^ 3/Exp[(h f/kB T)] - 1), f] == 0, f, Reals]Solve the Haissinski equation:
DSolve[w'[x] == -x / (1 - α w[x]) w[x], w, x]When a match is lit, the resulting ball of flame starts with a radius of
, grows rapidly until it reaches a certain size and stays that way, because the amount of oxygen being consumed by the combustion within the ball of flame is balanced by the amount available from the surface. Define a function modeling the flame propagation:
y[t_] := (1/1 + ProductLog[((1/δ) - 1)Exp[(1/δ) - 1 - t]])Show that the function satisfies a simple nonlinear differential equation:
y'[t] == y[t]^2 - y[t]^3//FullSimplifyVisualize the simplified flame propagation model over the range
, which shows modest growth until
and then tapers off after a short interval of rapid growth:
Plot[Evaluate[y[t] /. δ -> 1 / 100], {t, 0, 200}]Equipotential curves of a plate capacitor:
ϕ[{x_, y_}] := With[{z = x + I y}, Im[z - 1 - ProductLog[Ceiling[(y - Pi) / (2Pi)], Exp[z - 1]]]]ContourPlot[ϕ[{x, y}], {x, -2, 2}, {y, -4, 4}, Epilog -> {Red, Thickness[0.02], Line[{{-2, Pi}, {0, Pi}}], Line[{{-2, -Pi}, {0, -Pi}}]}, ContourShading -> False, Contours -> 20]Compute Gram points:
gp[k_] := Block[{t}, t /. FindRoot[RiemannSiegelTheta[t] - Pi k, {t, (1 / 4 + 2 k) Pi / ProductLog[(1 / 8 + k) / E]}]]Show good Gram points, where RiemannSiegelZ changes sign for consecutive points:
Plot[RiemannSiegelZ[t], {t, 0, 40}, Epilog -> {PointSize[0.03], Red, Point[Table[{gp[k], RiemannSiegelZ[1.0 gp[k]]}, {k, -1, 6}]], Green, Point[Table[{Im[ZetaZero[k]], 0}, {k, 1, 6}]]}]Plot[RiemannSiegelZ[t], {t, gp[125], gp[127]}, Epilog -> {PointSize[0.03], Green, Point[Table[{Im[ZetaZero[k]], 0}, {k, 126, 128}]], Red, Point[Table[{gp[k], RiemannSiegelZ[1.0 gp[k]]}, {k, 125, 127}]]}, Ticks -> {{282, 283, 284}, {-6, -4, -2, 0}}]Properties & Relations (5)
ProductLog is the inverse function of
:
N[ProductLog[-1], 20]% Exp[%]Compositions with the inverse function may need PowerExpand:
ProductLog[z]Exp[ProductLog[z]]ProductLog[z Exp[z]]PowerExpand[%]Use FullSimplify to simplify expressions containing ProductLog:
FullSimplify[E^α ProductLog[z] / ProductLog[z]^-α]Solve a transcendental equation:
Solve[ProductLog[z]^2 - 5 ProductLog[z] + 1 == 6, z]Integrate[z^a ProductLog[z]^b, z]D[%, z]//SimplifyPossible Issues (2)
ProductLog[-3. Exp[-3.]]ProductLog[3.] Exp[ ProductLog[3.]]On branch cuts, machine‐precision inputs can give numerically wrong answers:
N[ProductLog[-2 + I ((Pi + 1) ^ 2 - Pi ^ 2 - 2Pi - 1 - Exp[-Pi ^ 4])]]Use arbitrary‐precision arithmetic to get correct results:
N[ProductLog[-2 + I ((Pi + 1) ^ 2 - Pi ^ 2 - 2Pi - 1 - Exp[-Pi ^ 4])], 30]Tech Notes
Related Guides
Related Links
History
Introduced in 1996 (3.0) | Updated in 2021 (13.0) ▪ 2022 (13.1)
Text
Wolfram Research (1996), ProductLog, Wolfram Language function, https://reference.wolfram.com/language/ref/ProductLog.html (updated 2022).
CMS
Wolfram Language. 1996. "ProductLog." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2022. https://reference.wolfram.com/language/ref/ProductLog.html.
APA
Wolfram Language. (1996). ProductLog. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/ProductLog.html
BibTeX
@misc{reference.wolfram_2026_productlog, author="Wolfram Research", title="{ProductLog}", year="2022", howpublished="\url{https://reference.wolfram.com/language/ref/ProductLog.html}", note=[Accessed: 13-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_productlog, organization={Wolfram Research}, title={ProductLog}, year={2022}, url={https://reference.wolfram.com/language/ref/ProductLog.html}, note=[Accessed: 13-June-2026]}