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













0












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










share|improve this question











$endgroup$











  • $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$
    Could you give an example where it doesn't work x[0] != 0?
    $endgroup$
    – Chris K
    May 2 at 16:14















0












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










share|improve this question











$endgroup$











  • $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$
    Could you give an example where it doesn't work x[0] != 0?
    $endgroup$
    – Chris K
    May 2 at 16:14













0












0








0





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










share|improve this question











$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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited May 2 at 14:43







jarhead

















asked May 2 at 14:08









jarheadjarhead

674615




674615











  • $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$
    Could you give an example where it doesn't work x[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$
    @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$
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










1 Answer
1






active

oldest

votes


















4












$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]


Mathematica graphics




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]]]





share|improve this answer











$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











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



);













draft saved

draft discarded


















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









4












$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]


Mathematica graphics




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]]]





share|improve this answer











$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















4












$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]


Mathematica graphics




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]]]





share|improve this answer











$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













4












4








4





$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]


Mathematica graphics




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]]]





share|improve this answer











$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]


Mathematica graphics




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]]]






share|improve this answer














share|improve this answer



share|improve this answer








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
















  • $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

















draft saved

draft discarded
















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

Wikipedia:Vital articles Мазмуну Biography - Өмүр баян Philosophy and psychology - Философия жана психология Religion - Дин Social sciences - Коомдук илимдер Language and literature - Тил жана адабият Science - Илим Technology - Технология Arts and recreation - Искусство жана эс алуу History and geography - Тарых жана география Навигация менюсу

Bruxelas-Capital Índice Historia | Composición | Situación lingüística | Clima | Cidades irmandadas | Notas | Véxase tamén | Menú de navegacióneO uso das linguas en Bruxelas e a situación do neerlandés"Rexión de Bruxelas Capital"o orixinalSitio da rexiónPáxina de Bruselas no sitio da Oficina de Promoción Turística de Valonia e BruxelasMapa Interactivo da Rexión de Bruxelas-CapitaleeWorldCat332144929079854441105155190212ID28008674080552-90000 0001 0666 3698n94104302ID540940339365017018237

What should I write in an apology letter, since I have decided not to join a company after accepting an offer letterShould I keep looking after accepting a job offer?What should I do when I've been verbally told I would get an offer letter, but still haven't gotten one after 4 weeks?Do I accept an offer from a company that I am not likely to join?New job hasn't confirmed starting date and I want to give current employer as much notice as possibleHow should I address my manager in my resignation letter?HR delayed background verification, now jobless as resignedNo email communication after accepting a formal written offer. How should I phrase the call?What should I do if after receiving a verbal offer letter I am informed that my written job offer is put on hold due to some internal issues?Should I inform the current employer that I am about to resign within 1-2 weeks since I have signed the offer letter and waiting for visa?What company will do, if I send their offer letter to another company