Adding a limit in NDSolve to avoid division by zeroReturn partial result when MemoryConstrained aborts NDSolveInfinite Expression Error from NDSolveusing Module in NDSolveNDSolve solution does not satisfy boundary conditionsGetting error NDSolve:ndnum when solving a nonlinear coupled differential equationErrors in Solving Heat EquationSolving 2nd order ODE with NDSolveNDSolve unable to handle discontinuitiesDynamically updating parameter each iteration of NDSolveUsing WhenEvent to limit the derivative
Can someone explain homicide-related death rates?
Does gravity affect the time evolution of a QM wave function?
How exactly does artificial gravity work?
Non-deterministic Finite Automata | Sipser Example 1.16
Do Life Drain attacks from wights stack?
Anatomically Correct Carnivorous Tree
Extracting sublists that contain similar elements
Effects of ~10atm pressure on engine design
Help in identifying a mystery wall socket
Developers demotivated due to working on same project for more than 2 years
Is Germany still exporting arms to countries involved in Yemen?
Is there ever any indication in the MCU as to how Spider-Man got his powers?
Do I need to say 'o`clock'?
return tuple of uncopyable objects
What information do scammers need to withdraw money from an account?
Wireless headphones interfere with Wi-Fi signal on laptop
Jesus' words on the Jews
Is taking modulus on both sides of an equation valid?
Loading Latex packages into Mathematica
Jumping frame contents with beamer and pgfplots
what does a native speaker say when he wanted to leave his work?
What episode was being referenced by this part of Discovery's season 2 episode 13 recap?
What's the difference between "за ... от" and "в ... от"?
Does SQL Server allow (make visible) DDL inside a transaction to the transaction prior to commit?
Adding a limit in NDSolve to avoid division by zero
Return partial result when MemoryConstrained aborts NDSolveInfinite Expression Error from NDSolveusing Module in NDSolveNDSolve solution does not satisfy boundary conditionsGetting error NDSolve:ndnum when solving a nonlinear coupled differential equationErrors in Solving Heat EquationSolving 2nd order ODE with NDSolveNDSolve unable to handle discontinuitiesDynamically updating parameter each iteration of NDSolveUsing WhenEvent to limit the derivative
$begingroup$
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
?
Addition
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.
differential-equations singularity
$endgroup$
add a comment |
$begingroup$
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
?
Addition
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.
differential-equations singularity
$endgroup$
$begingroup$
Does your real problem involve1/0
in the initial conditions or elsewhere? I find that your simple example runs fine as long as you don't usex[0] == 0
.
$endgroup$
– Chris K
May 2 at 15:31
$begingroup$
@ChrisK, elsewhere, actually all along the solution periodically. I gave the initial condition as an example.
$endgroup$
– jarhead
May 2 at 15:49
$begingroup$
Could you give an example where it doesn't workx[0] != 0
?
$endgroup$
– Chris K
May 2 at 16:14
add a comment |
$begingroup$
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
?
Addition
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.
differential-equations singularity
$endgroup$
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
?
Addition
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.
differential-equations singularity
differential-equations singularity
edited May 2 at 14:43
jarhead
asked May 2 at 14:08
jarheadjarhead
674615
674615
$begingroup$
Does your real problem involve1/0
in the initial conditions or elsewhere? I find that your simple example runs fine as long as you don't usex[0] == 0
.
$endgroup$
– Chris K
May 2 at 15:31
$begingroup$
@ChrisK, elsewhere, actually all along the solution periodically. I gave the initial condition as an example.
$endgroup$
– jarhead
May 2 at 15:49
$begingroup$
Could you give an example where it doesn't workx[0] != 0
?
$endgroup$
– Chris K
May 2 at 16:14
add a comment |
$begingroup$
Does your real problem involve1/0
in the initial conditions or elsewhere? I find that your simple example runs fine as long as you don't usex[0] == 0
.
$endgroup$
– Chris K
May 2 at 15:31
$begingroup$
@ChrisK, elsewhere, actually all along the solution periodically. I gave the initial condition as an example.
$endgroup$
– jarhead
May 2 at 15:49
$begingroup$
Could you give an example where it doesn't workx[0] != 0
?
$endgroup$
– Chris K
May 2 at 16:14
$begingroup$
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
.$endgroup$
– Chris K
May 2 at 15:31
$begingroup$
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
.$endgroup$
– Chris K
May 2 at 15:31
$begingroup$
@ChrisK, elsewhere, actually all along the solution periodically. I gave the initial condition as an example.
$endgroup$
– jarhead
May 2 at 15:49
$begingroup$
@ChrisK, elsewhere, actually all along the solution periodically. I gave the initial condition as an example.
$endgroup$
– jarhead
May 2 at 15:49
$begingroup$
Could you give an example where it doesn't work
x[0] != 0
?$endgroup$
– Chris K
May 2 at 16:14
$begingroup$
Could you give an example where it doesn't work
x[0] != 0
?$endgroup$
– Chris K
May 2 at 16:14
add a comment |
1 Answer
1
active
oldest
votes
$begingroup$
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]]]
$endgroup$
$begingroup$
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.
$endgroup$
– jarhead
May 2 at 14:44
$begingroup$
Please also keep the answer restricted to 'NDSolve' if possible.
$endgroup$
– jarhead
May 2 at 14:45
$begingroup$
@jarhead Check my update.
$endgroup$
– xzczd
May 2 at 14:57
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "387"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f197526%2fadding-a-limit-in-ndsolve-to-avoid-division-by-zero%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
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]]]
$endgroup$
$begingroup$
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.
$endgroup$
– jarhead
May 2 at 14:44
$begingroup$
Please also keep the answer restricted to 'NDSolve' if possible.
$endgroup$
– jarhead
May 2 at 14:45
$begingroup$
@jarhead Check my update.
$endgroup$
– xzczd
May 2 at 14:57
add a comment |
$begingroup$
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]]]
$endgroup$
$begingroup$
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.
$endgroup$
– jarhead
May 2 at 14:44
$begingroup$
Please also keep the answer restricted to 'NDSolve' if possible.
$endgroup$
– jarhead
May 2 at 14:45
$begingroup$
@jarhead Check my update.
$endgroup$
– xzczd
May 2 at 14:57
add a comment |
$begingroup$
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]]]
$endgroup$
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]]]
edited May 2 at 14:57
answered May 2 at 14:38
xzczdxzczd
28.2k577261
28.2k577261
$begingroup$
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.
$endgroup$
– jarhead
May 2 at 14:44
$begingroup$
Please also keep the answer restricted to 'NDSolve' if possible.
$endgroup$
– jarhead
May 2 at 14:45
$begingroup$
@jarhead Check my update.
$endgroup$
– xzczd
May 2 at 14:57
add a comment |
$begingroup$
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.
$endgroup$
– jarhead
May 2 at 14:44
$begingroup$
Please also keep the answer restricted to 'NDSolve' if possible.
$endgroup$
– jarhead
May 2 at 14:45
$begingroup$
@jarhead Check my update.
$endgroup$
– xzczd
May 2 at 14:57
$begingroup$
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.
$endgroup$
– jarhead
May 2 at 14:44
$begingroup$
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.
$endgroup$
– jarhead
May 2 at 14:44
$begingroup$
Please also keep the answer restricted to 'NDSolve' if possible.
$endgroup$
– jarhead
May 2 at 14:45
$begingroup$
Please also keep the answer restricted to 'NDSolve' if possible.
$endgroup$
– jarhead
May 2 at 14:45
$begingroup$
@jarhead Check my update.
$endgroup$
– xzczd
May 2 at 14:57
$begingroup$
@jarhead Check my update.
$endgroup$
– xzczd
May 2 at 14:57
add a comment |
Thanks for contributing an answer to Mathematica Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmathematica.stackexchange.com%2fquestions%2f197526%2fadding-a-limit-in-ndsolve-to-avoid-division-by-zero%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
$begingroup$
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 usex[0] == 0
.$endgroup$
– Chris K
May 2 at 15:31
$begingroup$
@ChrisK, elsewhere, actually all along the solution periodically. I gave the initial condition as an example.
$endgroup$
– jarhead
May 2 at 15:49
$begingroup$
Could you give an example where it doesn't work
x[0] != 0
?$endgroup$
– Chris K
May 2 at 16:14