# Revision history [back]

The steps (and graphs !) of this solution are available in Sagecell

Let's see. We suppose for now that this equation is to solve in reals :

var("t", domain="real")
Ex=0.111*t-(1- e^(-0.3*t))


We note an "obvious" root :

Ex.subs(t=0)
0


Is there an explicit solution ?

Ex.log_expand().log().solve(t)
[t == 1000/111*(2*e^(3/10*t) - 1)*e^(-3/10*t)]


No such luck : this is an implicit solution, no more informative than the original equation. Let's try a numerical solution. What is the shape of the representative curve of this expression ? A curve with a minimum around about 3, null at 0 and about 8, decreasing below 3 and increasing above 3 (see Sagecell). What can we prove ?

The first derivative is

Ex.diff(t)
-0.300000000000000*e^(-0.300000000000000*t) + 0.111000000000000


An increasing curve, null about 3. Can we prove that ? The second derivative is

Ex.diff(t,2)
0.0900000000000000*e^(-0.300000000000000*t)


Yay ! This is strictly positive for all reals. Therefore, the zero we "see" on the first derivative at about 3 is the only one, and is

Ex.diff(t).solve(t)
[t == 10*log(1/37*100^(1/3)*37^(2/3))]
Ex.diff(t).solve(t).rhs().n()
3.31417424447956


Now we have proven that Ex is decreasing before this zero and increasing after that. At the minimum, it is :

Ex.subs(t==Ex.diff(t).solve(t).rhs()).n()
-0.262126658862769


Since it is negative at this point and not upward bound (exercise for the reader : prove it !), it has two roots, one (0) being already known. The graphs suggest that Ex is positive for t=10. Let's try to find a numerical solution :

Ex.find_root(0.1,10,t)
8.25101463236195


which is the sought answer.

Left to the reader : what are the complex roots (if any...) ? Fair warning : this one is much harder than the real case (bound to problems open since the XIXth century, and still not solved...).

The steps (and graphs !) of this solution are available in Sagecell

Let's see. We suppose for now that this equation is to solve in reals :

var("t", domain="real")
Ex=0.111*t-(1- e^(-0.3*t))


We note an "obvious" root :

Ex.subs(t=0)
0


Is there an explicit solution ?

Ex.log_expand().log().solve(t)
[t == 1000/111*(2*e^(3/10*t) - 1)*e^(-3/10*t)]


No such luck : this is an implicit solution, no more informative than the original equation. Let's try a numerical solution. What is the shape of the representative curve of this expression ? A curve with a minimum around about 3, null at 0 and about 8, decreasing below 3 and increasing above 3 (see Sagecell). What can we prove ?

The first derivative is

Ex.diff(t)
-0.300000000000000*e^(-0.300000000000000*t) + 0.111000000000000


An increasing curve, null about 3. Can we prove that ? The second derivative is

Ex.diff(t,2)
0.0900000000000000*e^(-0.300000000000000*t)


Yay ! This is strictly positive for all reals. Therefore, the zero we "see" on the first derivative at about 3 is the only one, and is

Ex.diff(t).solve(t)
[t == 10*log(1/37*100^(1/3)*37^(2/3))]
Ex.diff(t).solve(t).rhs().n()
3.31417424447956


Now we have proven that Ex is decreasing before this zero and increasing after that. At the minimum, it is :

Ex.subs(t==Ex.diff(t).solve(t).rhs()).n()
-0.262126658862769


Since it is negative at this point and not upward bound (exercise for the reader : prove it !), it has two roots, one (0) being already known. The graphs suggest that Ex is positive for t=10. Let's try to find a numerical solution :

Ex.find_root(0.1,10,t)
8.25101463236195


which is the sought answer.

Left to the reader : what are the complex roots (if any...) ? Fair warning : this one is much harder than the real case (bound to problems open since the XIXth century, and still not solved...).

EDIT : It turns out that Sympy can give us the non-trivial real root in symbolic form :

sage: import sympy
sage: sympy.solve(Ex, t)
[10*LambertW(-100*exp(-100/37)/37)/3 + 1000/111,
10*LambertW(-100*exp(-100/37)/37, -1)/3 + 1000/111]


The numerical values are as expected :

sage: [s.n() for s in sympy.solve(Ex, t)]
[8.25101463236202, 0.e-123]


This function is known to Sage, but the conversion is incorrect (loses the second argument)

sage: [s._sage_() for s in sympy.solve(Ex, t)]
[10/3*lambert_w(-100/37*e^(-100/37)) + 1000/111,
10/3*lambert_w(-100/37*e^(-100/37)) + 1000/111]


This is now Trac#26752