Prob with NDSolve in Mathematica

  • Context: Mathematica 
  • Thread starter Thread starter Barnak
  • Start date Start date
  • Tags Tags
    Mathematica
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
6 replies · 4K views
Barnak
Messages
62
Reaction score
0
How can I show the regular part of the solution of a differential equation, numerically solved with NDSolve, if there's a singularity on the curve ?

I know how to use NDSolve and show its solution, but Mathematica gives a bad curve after some point (singularity jumping). I don't want to show this part, just the regular curve BEFORE the singularity (which is occurring at t = %$&*).

More precisely, the curve function should be strictly positive : a[t] > 0. The NDSolve should stop the resolution if a <= 0. I added the command StoppingTest -> (a[t] < 0.001) or StoppingTest -> (a[t] <= 0) but it doesn't work. I'm still getting wrong curve parts with a[t] < 0.

Any idea ?
 
on Phys.org
Why don't you just solve over the interval you're solving over now, but only plot it over the interval where it's positive?
 
Duh ! Because I don't know in advance what are the singularities !

There are two singularities on the curve, and I need to plot the regular part between them. There's no way I can know in advance the exact values of the singularities.
 
https://www.youtube.com/watch?v=
phyzguy said:
Try using Sow and Reap inside the NDSolve, and only Sow when the answer meets your criterion, as in the attached notebook.

Very good trick ! Thanks a lot for that info ! :smile:

However, I found the right solution to my problem : I just have to define the x values at which the curve y[x] blows away, like this :

Code:
Xmin := (y /. Curve)[[1]][[1]][[1]][[1]]
Xmax := (y /. Curve)[[1]][[1]][[1]][[2]]

Then, I plot the curve between these two values.
 
I don't see how that's different than what I suggested.. but glad it worked for you
 
kai_sikorski said:
I don't see how that's different than what I suggested.. but glad it worked for you

Actually, it's exactly what you suggested. I just wasn't able to see how to implement it at first.