This is not really an answer, but a comment. I write it in the window for the answers since it requires illustrations.
In addition to what @Szabolcs wrote in his comment, not only that this equation (a nonlinear Fermi-like distribution) has no exact solution, but it also exhibits a bifurcation. To make sure let us plot the left- and the right-hand parts of your equations for different values of the parameter xD
. That can be done with Manipulate
:
Manipulate[
Plot[{u,
126 + 500 (-1 + 2/(1 + E^((150 - u)/10))) (-1/2 + xD)}, {u,-100,400}],
{xD, -1, 1, Appearance -> "Labeled"}]
As you see I have chosen the same interval for u
as you did, and the interval (-1,1) for xD
. At xD=-1
it is shown below:
The blue line is the lhp and the yellow one is the rhp of the equation. As we see there is a single solution at this value of the parameter.
At xD=approx=0.616
one observs a bifurcation point:
In which a new solution shows up, which then splits into two ones at higher xD
values:
In the situations involving a bifurcation an analytical solution can be obtained in exceptional cases, and this is not such an exceptional case.
However, the bifurcation point itself, as well as the solution in its close vicinity can be obtained without great difficulties.
Also, a numeric solution of each of these three solutions can be easily tabulated as a function of xD
.
However, first of all, it should be decided, which one of these solutions you are interested in.
Edit: addressing your questions.
Yes, it is easy to find the bifurcation point. Its condition is as follows. One needs to calculate a derivative of the equation. In your case equation is:
eqh1 = u == 126 + 500 (-1 + 2/(1 + E^((150 - u)/10))) (-(1/2) + xD);
And here is the derivative:
eqh2 = D[eqh1[[2]], u] == 1 // Simplify
(* (50 E^(15 + u/10) (-1 + 2 xD))/(E^15 + E^(u/10))^2 == 1 *)
In the bifurcation point they must be satisfied simultaneously:
sl1 = Solve[{eqh1, eqh2}, {u, xD}, Reals] // N
(* {{u -> 172., xD -> 0.615}} *)
which gives you the bifurcation point.
Now let us express xD
in terms of u
:
sl2 = Solve[eqh1, xD][[1, 1, 2]]
and make a table with the elements {xD, u}
:
lst = Table[{sl2 // N, u}, {u, 151, 170, 0.5}]
They are selected such that xD>0.651
and 151<u<170
which garantees that the middle solution is selected.
This solution can be built as a ListPlot
. Another way to build it as a ParametricPlot
:
Show[{
ParametricPlot[{sl2, u}, {u, 151, 170}, AspectRatio -> 0.7,
AxesLabel -> {Style["xD", Italic, 16], Style["u", Italic, 16]}],
ListPlot[lst, PlotStyle -> Red]
}]
yielding the following plot:
Thus, the list above represents a tabulated solution that you need. One can further find some simple function that accurately fitts to this solution.
Have fun!
xD
an explicit value,Reduce
can give you an exact solution in the sense that it can guarantee that all solutions are found and it can compute them to arbitrary precision. It cannot express them using a formula though. $\endgroup$ProductLog
(Lambert W function).ProductLog
is just a workaround for not being able to express the solution of an equation otherwise: let's give the solution a name then, prove various properties about it, and come up with a way to calculate it numerically. This is what you can do with your equation as well. $\endgroup$