       Re: InterpolatingFunction in NDSolve

• To: mathgroup at smc.vnet.net
• Subject: [mg21647] Re: InterpolatingFunction in NDSolve
• From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
• Date: Fri, 21 Jan 2000 03:59:56 -0500 (EST)
• Organization: Universitaet Leipzig
• References: <86196r\$la7@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```Hi,

the code
Clear[sss];
Clear[solution];
Clear[sol2];

solution =
NDSolve[{Derivative[y][x] == -10*y[x], y == 1}, y, {x, 0, 0.5}]

sss = (y[x] /. solution[])[];
(*interpolating function seems to be ok : can Plot it*)

Plot[sss[t], {t, 0, 0.5}];

Derivs[y_, x_?NumericQ] := If[x < 0.25, sss[x], -sss[x]]

sol2 = NDSolve[{Derivative[y][x] == Derivs[y, x], y == 0},
y, {x, 0, 0.5}]
Plot[Evaluate[y[x] /. sol2], {x, 0, 0.5}];

works fine. What is your problem ?  Look at my Derivs[] function
and never test a unrestricted pattern against a number.

Hope that helps
Jens

eborzova at my-deja.com wrote:
>
> Hi everybody.
> My question could be simple, but I just can't
> figure it out. I need to use InterpolatingFunction
> inside yet another function (Derivs) that is rhs
> for NDSolve (please refer to the code below). The
> problem is that if my rhs "Derivs" has some sort
> of conditional logic (e.g. "If"), then it stops
> working (see a comment with Return[sss[x]]).
>
> Any help/hints/feedback are greatly appreciated!
>
>           Thanks.
>                   Elena.
> Clear[sss];
> Clear[solution];
> Clear[sol2];
> solution = NDSolve[{Derivative[y][x]==-10*y
> [x], y == 1},
>                     y,{x, 0, 0.5}]
>
> sss = (y[x] /. solution[])[];
>
> (* interpolating function seems to be ok: can
> Plot it *)
> Plot[sss[t], {t, 0, 0.5}];
>
> Derivs[y_, x_] := Block[{},
>
>      (* uncomment below to make it work *)
>
>      (* Return[sss[x]]; *)
>
>      If[x < 0.25, Return[sss[x]], Return[-sss
> [x]]];
>
>      Print["Ooops!!!!"];
>
>      Abort[];
> ];
>
> sol2 = NDSolve[{Derivative[y][x] == Derivs[y,
> x], y == 0},
>                 y,{x, 0, 0.5}]
>
> Plot[Evaluate[y[x] /. sol2], {x, 0, 0.5}];
>
> Sent via Deja.com http://www.deja.com/