       • To: mathgroup at christensen.cybernetics.net
• Subject: [mg245] Question about function definitions
• From: Scott Herod <sherod at boussinesq.Colorado.EDU>
• Date: Mon, 28 Nov 1994 13:10:01 -0700 (MST)

```Here is a question related to the issue of multiple function
definitions.  First let me present some code segments with examples of
their execution.

-----------File delsol.m:

delay[num_, T_, z_] := Module[{},
f[s_] := 0.7 + 0.1 s;
witchargs = {};
For[k = 0, k <= num, k++,
sol = NDSolve[{y'[t] + y[t] == f[t] ( 2 - f[t]^z),
y[T*k] == f[T*(k+1)]}, y, {t,T*k,T*(k+1)}];
(*  Clear[f]; *)
f[s_] := Evaluate[(y /. Flatten[sol])][s-T];
witchargs = {witchargs, t <= T*(k+1), Evaluate[(y /. Flatten[sol])][t]}
];
g[t_] = Apply[Which, Flatten[witchargs]];
];

---------Example Run

Mathematica 2.2 for Solaris
License valid through 28 Nov 1995.
-- Open Look graphics initialized --

In:= <<delsol.m

In:= delay[3,2,3]

In:= ??f
Global`f

f[s_] := 0.7 + 0.1*s

f[s\$_] := Evaluate[y /. Flatten[sol]][s\$ - 2]

----------Discussion

I am computing solutions to a differential-delay equation discussed by
R.M. May in a 1981 paper.  The idea is to iterate on the set of smooth
functions defined on [0,T].  Anyway, this code doesn't work because
the NDSolve routine always sees the first definition of f with the "s"
not the definition with the "s\$".  Of course a fix is to clear f each
time through the loop, but I would be interested in understanding why
the \$ is appended.  Especially considering the next example.

------------File vartest.m

tes[num_] := Module[{},
f[t_] := Sin[t];
For[k = 1, k <= num, k++,
y = f';
f[t_] = y[t - 2];
]
]

------------Example run

Mathematica 2.2 for Solaris
License valid through 28 Nov 1995.
-- Open Look graphics initialized --

In:= <<vartest.m

In:= tes

In:= ??f
Global`f

f[t_] = -Cos[6 - t]

------------Discussion

What is it about the above routine which is different from the first
so that the "\$" is not added to the variable \$t\$?

Scott A. Herod
Program in Applied Mathematics