First time here? Check out the FAQ!

Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

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)[0].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)[0].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...).

click to hide/show revision 2
No.2 Revision

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)[0].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)[0].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