Re: Wrapping NDSolve within a function
- To: mathgroup at smc.vnet.net
- Subject: [mg126345] Re: Wrapping NDSolve within a function
- From: "Nasser M. Abbasi" <nma at 12000.org>
- Date: Thu, 3 May 2012 04:35:17 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jnqvn6$j5n$1@smc.vnet.net>
- Reply-to: nma at 12000.org
On 5/2/2012 4:45 AM, bbeckage wrote: > When I try to return the interpolating function produced by NDSolve from > within a function, the object returned has an unexpected $7360 appended, > e.g., > Symbols defined inside Modules will have $nnnn appended to their names. Rules of thumbs I use: Do not return symbols defined inside Module back to the caller. To do what you want, pass these symbols along with the other call parameters. This way, these symbols will be used inside the Module. Also, no need to use Return. By default, the last expression value is the one returned from a Module. Just make sure there is no ";" at the end of the expression. ---------------------------------------------------------- predState[rg_, rp_, rh_, Mg_, Mp_, Mh_, g_, p_, q_] := Module[{parmList3woC, parmListND3woC, A, B, Rb, Rc, solND}, parmListND3woC = {A -> Mg/rg, B -> Mp/rg, C -> Mh/rg, Rb -> rp/rg, Rc -> rh/rg}; NDSolve[{Derivative[1][g][t] == g[t]*(1 - g[t] - p[t] - q[t]) - A*g[t]*g[t] /. parmListND3woC, Derivative[1][p][t] == Rb*p[t]*(1 - p[t] - q[t]) - B*p[t]*g[t] /. parmListND3woC, Derivative[1][q][t] == Rc*q[t]*(1 - q[t]) - C*q[t]*g[t] /. parmListND3woC, g[0] == 0.5, p[0] == 0.5, q[0] == 0.5}, {g, p, q}, {t, 0, 1000}] ] out=predState[1.5,0.4,0.2,0.1,0.0002,0.0099,g,p,q] ------------------------------------------------------- {{g->InterpolatingFunction[{{0.,1000.}},<>], p->InterpolatingFunction[{{0.,1000.}},<>], q->InterpolatingFunction[{{0.,1000.}},<>]}} --Nasser