# Adding a limit in NDSolve to avoid division by zero

I'm trying to solve a set of differential equations in which one of the functions that describe the time derivative gets values which make it divide by zero

x'[t] = (Exp[x] - 1)/(Exp[x] - 1 + x)


So what happens is that when NDSolve gets values of x=0 you get that an Infinite expression of 1/0 encountered.

However, when I have x=0 I would actually like to replace it with the limit of x->0

 Limit[(Exp[x] - 1)/(Exp[x] - 1 + x), x -> 0]


which is 1/2.

Any suggestions of how to implement the idea in NDSolve?

Look for simplicity at the following case

NDSolve[{x'[t] == (Exp[x[t]] - 1)/(Exp[x[t]] - 1 + x[t]),
x[0] == 0}, x, {t, 0, 1}]


Here x'[t] encounters 1/0 in the initial condition, but I would like it to get the limit of x->0 which is 1/2. Note that in my problem which is far more complicated, x'[t] encounters this limit many times and the value of the limit is varied with respect to other state variables, therefore I would like the limit to be calculated in each iteration.

• Does your real problem involve 1/0 in the initial conditions or elsewhere? I find that your simple example runs fine as long as you don't use x[0] == 0. Commented May 2, 2019 at 15:31
• @ChrisK, elsewhere, actually all along the solution periodically. I gave the initial condition as an example. Commented May 2, 2019 at 15:49
• Could you give an example where it doesn't work x[0] != 0? Commented May 2, 2019 at 16:14

If:

eq = With[{x = x[t]}, D[x, t] == If[x == 0, 1/2, (Exp[x] - 1)/(Exp[x] - 1 + x)]]

sol = NDSolveValue[{eq, x[0] == -1}, x, {t, 0, 6}]

Plot[sol[t], {t, 0, 6}]


# Update

If the limit needs to be calculated each time it encounters zero:

eq = With[{x = x[t]},
With[{expr = (Exp[x] - 1)/(Exp[x] - 1 + x)},
D[x, t] == If[x == 0, Limit[expr, x -> 0], expr]]]

• thanks for the answer, please look at my addition to the question. It is important that the limit will be calculated each time it encounters zero. Commented May 2, 2019 at 14:44
• Please also keep the answer restricted to 'NDSolve' if possible. Commented May 2, 2019 at 14:45
• @jarhead Check my update. Commented May 2, 2019 at 14:57