Re: stepwise ode. why does this fail?
- To: mathgroup at smc.vnet.net
- Subject: [mg48421] Re: stepwise ode. why does this fail?
- From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
- Date: Sat, 29 May 2004 03:06:42 -0400 (EDT)
- Organization: Universitaet Leipzig
- References: <c96i6n$ikr$1@smc.vnet.net>
- Reply-to: kuska at informatik.uni-leipzig.de
- Sender: owner-wri-mathgroup at wolfram.com
Hi,
because a0 is a function of t and you don't like to
tell Mathematica this, but:
Clear[a0]
k1 = 1/10;
k2 = 1/20;
a0[t_] := Which[
t < 0, 0,
0 <= t <= 200, 1/20,
200 <= t <= 600, 0,
600 <= t, 1/20]
ndsolution =
NDSolve[{b'[t] == -k2 b[t] y[t], x'[t] == -k1 a0[t] x[t] + k2 b[t]
y[t],
y'[t] == k1 *a0[t]x[t] - k2 b[t] y[t], b[0] == 1, x[0] == 1,
y[0] == 0}, {b, x, y}, {t, 0, 1000}]
work as expected.
Regards
Jens
sean kim wrote:
>
> Why does this fail? I don't understand. I think it's because the
> function defining the a0 is delayed... is that right?
>
> if so, how do i define a stepwise ode in Mathematica? I wanted to make a0= 0
> at time 0, then 1/20 for given time then 0 and again opver next time
> frame then 1/20 again for the rest of the time.
>
> below is my attempt. but it brings back
>
> NDSolve::ndnum: Encountered non-numerical value for a derivative at t
> == 0.
>
> k1 = 1/10;
> k2 = 1/20;
> a0 := 0 /; t < 0 ;
> a0 := 1/20 /; 0 <= t <= 200 ;
> a0 := 0 /; 200 <= t <= 600 ;
> a0 := 1/20 /; 600 <= t <= 1000;
>
> ndsolution =
> NDSolve[{b'[t] == -k2 b[t] y[t], x'[t] == -k1 a0 x[t] + k2 b[t] y[t],
> y'[t] == k1 a0 x[t] - k2 b[t] y[t], b[0] == 1, x[0] == 1, y[0] == 0},
> {b, x, y}, {t, 0, 1000}]
>
> thanks all very much in advance for any and all comments.
>
> sean