Mathematica Prob with NDSolve in Mathematica

  • Thread starter Thread starter Barnak
  • Start date Start date
  • Tags Tags
    Mathematica
AI Thread Summary
The discussion centers on using NDSolve in Mathematica to plot the regular part of a solution to a differential equation, avoiding singularities. Users encounter issues with unwanted curve segments appearing after singularities, despite attempts to implement StoppingTest to halt the solution when the curve becomes non-positive. A suggested solution involves using Sow and Reap within NDSolve to selectively capture valid segments of the curve. Ultimately, one user resolves their issue by defining the x-values where the curve becomes singular and plotting only between those points. The conversation highlights the challenges of identifying singularities in advance and the importance of effective plotting techniques in Mathematica.
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 ?
 
Physics news 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.
 
Try using Sow and Reap inside the NDSolve, and only Sow when the answer meets your criterion, as in the attached notebook.
 

Attachments

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.
 

Similar threads

Replies
1
Views
2K
Replies
1
Views
1K
Replies
4
Views
3K
Replies
3
Views
8K
Replies
5
Views
3K
Replies
1
Views
2K
Replies
6
Views
2K
Replies
5
Views
2K
Back
Top