0

This has the obvious solution $x=0$ but it also has a positive solution (which must be $x<1$, ignoring complex numbers) when $a>0$ and $<\frac{1}{e}$.

I can solve it by fixed-point iteration

Eg:

$a=0.1$ and $x=0.8628711425761376$

or $a=0.3$ and $x=0.31852395682012924$

but does it an analytical solution?

Substituting $\frac{x}{\log(a)}$ for $x$ we get: $e^x = 1-x/b$ where $b=\log{a}$

So $x = \log (\frac{1-x}{b})$ is an equivalent form, if it helps.

1 Answers1

3

(Edited in response to comments.)

\begin{align} a^x &= 1 - x \\ a^{1-t} &= t \tag{Subtitute $t = 1 - x$} \\ t a^t & = a \\ t\ln a \cdot e^{t \ln a} &= a \ln a \\ t \ln a &= W(a \ln a) \\ t &= \frac{W(a \ln a)}{\ln a} \\ &= \frac{W(u e^u)}{u} \tag{Subtitute $u = \ln a$} \end{align}

where $W$ is Lambert-$W$ function.

The last substitution is for applying the identities for certain range of $u$.

\begin{array}{c|c} u & W \\ \hline u \ge 0 & W(ue^u) = u \\ \hline u \ge -1 & W_{0}(ue^u) = u \\ \hline u \le -1 & W_{-1}(ue^u) = u \end{array}

\begin{array}{c|c|c|c|c} a & 0 < a < e^{-1} & a = e^{-1} & e^{-1} < a < 1 & a > 1 \\ \hline u = \ln a & u < -1 & u = 0 & -1 < u < 0 & u > 0 \\ \hline a \ln a & \rlap{\bbox[black, 10pt]{\color{white}{\text{between } -e^{-1} \text{ and } 0}}} & & & > 0 \\ \hline \small \text{Trivial solution } t = 1 & \dfrac{W_{-1}(u e^u)}{u} & {W_{-1} \text{ and } W_0 \\ \text{coïncide}} & \dfrac{W_0(u e^u)}{u} & \dfrac{W(u e^u)}{u} \\ \hline \small \text{Nontrivial solution } t & \dfrac{W_0(u e^u)}{u} & \text{doesn't exist} & \dfrac{W_{-1}(u e^u)}{u} & \text{doesn't exist} \\ \hline \small \text{Nontrivial solution } x = 1-t & 1 - \dfrac{W_0(u e^u)}{u} & \text{doesn't exist} & 1 - \dfrac{W_{-1}(u e^u)}{u} & \text{doesn't exist} \end{array}


Numerical tests using Python

Here's some numerical solutions for $ta^t = a$ when $a = 0.1, \dots, 0.9$.

from scipy.special import lambertw
from numpy import *
avec = arange(0.1, 1.0, 0.1)
t0 = lambertw(avec*log(avec))/log(avec)  # upper branch
print t0
[ 0.13712886-0.j  0.35298438-0.j  0.68147604-0.j  1.00000000-0.j
  1.00000000-0.j  1.00000000-0.j  1.00000000-0.j  1.00000000-0.j
  1.00000000-0.j]
t0*avec**t0
array([ 0.1+0.j,  0.2+0.j,  0.3+0.j,  0.4+0.j,  0.5+0.j,  0.6+0.j,
    0.7+0.j,  0.8+0.j,  0.9+0.j])
t1 = lambertw(avec*log(avec), -1)/log(avec)  # lower branch
print t1
[  1.00000000-0.j   1.00000000-0.j   1.00000000-0.j   1.18811482-0.j
   2.00000000-0.j   3.38979929-0.j   6.04398759-0.j  12.21577702-0.j
  34.64890685-0.j]
t1*avec**t1
array([ 0.1+0.j,  0.2+0.j,  0.3+0.j,  0.4+0.j,  0.5+0.j,  0.6+0.j,
        0.7+0.j,  0.8+0.j,  0.9+0.j])

P.S. The above code can be run online thanks to Python Anywhere.