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...).
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