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

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.