Re: Problem with discontinuity in NDSolve[]
- To: mathgroup at smc.vnet.net
- Subject: [mg4404] Re: Problem with discontinuity in NDSolve[]
- From: rubin at msu.edu (Paul A. Rubin)
- Date: Fri, 19 Jul 1996 03:46:47 -0400
- Organization: Michigan State University
- Sender: owner-wri-mathgroup at wolfram.com
In article <4qqnms$49m at dragonfly.wolfram.com>,
a_kowald at chemie.fu-berlin.de (Axel Kowald) wrote:
->Hi everybody,
->
->I have a problem with NDSolve if my equation contains a discontinuity.
->If I try
->
->NDSolve[{y'[t] == 10 - y[t] * If[y[t]-15 <= 0, 0, 1],
-> y[0] == 0}, y, {t,0,20}]
->
->I always get the error: Maximum number of steps reached.
->The solution should be a linear increase until y = 15 followed by an
->exponential decay until a steady state is reached by y = 10
->
->
->Funny enough if I try
->
->NDSolve[{y'[t] == 10 - y[t] * If[t-15 <= 0, 0, 1],
-> y[0] == 0}, y, {t,0,20}]
->
->
->causing the discontinuity to be at t = 15 instead of y = 15 NDSolve has
no
->problems at all. (But of course this is not what I want.)
->
->
->ANY SOLUTIONS ??? ANY IDEAS ???
->
->
->
->Many thanks
->
->
-> Axel Kowald
->
->
->P.S. I'm using Mma 2.2 on a Mac with 7.5.3 and 24 MB RAM
I tried this in Mma 2.2.2/Windows, and got the same thing. I'm not sure
what Mma is using to solve the ODE, but I suspected at first that it was
just jamming at the point where the derivative of y[t] is undefined
(t=1.5). The difference between your first and second versions is that in
the second version, since it knows t exactly, the error in estimating y'[t]
is proportional to the error in estimating y[t], whereas in the first
method small errors in y[t] produce relatively enormous errors in y'[t]
(which essentially flip-flops between 10 and approximately -5).
I still think that's part of the problem, but there may be something about
how Mma does its function evaluations at work. I tried replacing your If[]
factor with Max[ 0, Min[ 1, (y[t] - 15)/eps ] ], where eps was given a
small positive value (.0001) beforehand. This was an attempt to smooth the
transition from 0 to 1 in the If[]. NDSolve produced no diagnostics, but
the solution it gave rose linearly from t=0, y=0 to t=1.5, y=15, and then
leveled out as a constant function (y=15 for t>1.5), which is utterly
wrong!
Paul
**************************************************************************
* Paul A. Rubin Phone: (517) 432-3509 *
* Department of Management Fax: (517) 432-1111 *
* Eli Broad Graduate School of Management Net: RUBIN at MSU.EDU *
* Michigan State University *
* East Lansing, MI 48824-1122 (USA) *
**************************************************************************
Mathematicians are like Frenchmen: whenever you say something to them,
they translate it into their own language, and at once it is something
entirely different. J. W. v. GOETHE
==== [MESSAGE SEPARATOR] ====