# ProductLog solution is not full

Consider a function $g(x) = a \ x^{\alpha}e^{-bx}$. It typically behaves in the following way: first it increases until reaching maximum as $x^{\alpha}$, and then decreases exponentially as $e^{-bx}$. Therefore, it takes particular values two times.

But when I'm looking for a solution

Solve[a x^α*Exp[-b x] == 2, x]


sometimes Mathematica finds (apart from complex solutions) only one solution (say, before extremum), ignoring the second solution. Is there any way to force it to find all the solutions?

Here is simple demonstration of the problem:

g[α_, a_, b_, x_] = a x^α Exp[-b x];
Solution[α_, a_, b_] = x /. Solve[g[α, a, b, x] == 2, x]
N[Solution[5, 10^8, 10^-3]]
LogLogPlot[{g[5, 10^8, 10^-3, x], 2}, {x, 0.01, 10^5}]
(* {-((α ProductLog[-((2^(1/α) (1/a)^(1/α) b)/α])/b)} *)
(* {0.0288542} *)


Comparing the plot and the value of the solution, it is seen that Solve gives only the solution for the point before maximum.

Update: it seems that the problem in analytic form of the solution. If I define the Solution function through :=, then it for particular values of parameters it shows the full set of solutions. However, I don't understand why it doesn't show the full set for arbitrary parameters. This is important for me, since I'm looking for solution in analytic form (in terms of ProductLog function).

The 2 argument version of ProductLog can be used to select different branches. In your question, the two real branches are at 0 (the default) and -1. So, take the solution given by Solve:

g[α_, a_, b_] := a x^α Exp[-b x]
soln = Solve[g[α, a, b] == 2, x]


Solve::ifun: Inverse functions are being used by Solve, so some solutions may not be found; use Reduce for complete solution information.

{{x -> -((α ProductLog[-(( 2^(1/α) (1/a)^(1/α) b)/α)])/b)}}

and change the branches:

full[α_, a_, b_] = x /. First @ soln /. ProductLog[e_] :> ProductLog[{0,-1}, e]


{-((α ProductLog[-((2^(1/α) (1/a)^(1/α) b)/α)])/ b), -((α ProductLog[-1, -(( 2^(1/α) (1/a)^(1/α) b)/α)])/b)}

Check:

full[5, 10^8, 10^-3] //N

g[5, 10^8, 10^-3] /. x->full[5, 10^8, 10^-3]//N


{0.0288542, 73771.1}

{2., 2.}

• Thank you very much! Commented Sep 19, 2018 at 19:58