       Re: can Mathematica generate itself a function?

• To: mathgroup at smc.vnet.net
• Subject: [mg31828] Re: can Mathematica generate itself a function?
• From: Roland Franzius <Roland.franzius at Uos.de>
• Date: Wed, 5 Dec 2001 06:51:55 -0500 (EST)
• Organization: Uni Osnabrueck
• References: <9ua3dr\$183\$1@smc.vnet.net>
• Sender: owner-wri-mathgroup at wolfram.com

```Hello,
I think the easiest way to perform tasks like this is to generate an
arguments string and convert it to an expression during evaluation af the
function definition. In order to get evaluated the lhs of :=   the head
SetDelayed is mounted by pattern replacement

args[name_, n_] :=
Table[ToExpression[ToString[name] <> ToString[k] <> "_"] , {k, 1, n}];

makeFunktion[f_, x_, n_, expression_] :=
dummy [   f @@ args[x, n], expression] /. dummy -> SetDelayed

It reults in:

makeFunktion[fff, xxx, 4, abc]

??fff
"Global`fff"
fff[xxx1_, xxx2_, xxx3_, xxx4_] := abc

HTH
Roland Franzius

"Romoscanu, Alexandre" wrote:

> Hello
>
> I am trying to set Mathematica to create itself a function, and then
> consider it as a function definition.
>
> Suppose I want to create a function of the form
>
> function[w,a1,...aN]
>
> where w is a variable and a1...aN, a total of N parameters (such a
> function can for example be used as a fitting model with N parameters in
> NonlinearRegress, etc...)
>
> In some cases, 2 parameters will be requested, i.e. N=2.
>
> In some, one would like the function to have 5 parameters(N=5) to
> define, say a 1-variable, 5-parameter fitting model.
>
> I would like to program Mathematica to create the function itself on a
> given pattern, my only input being the number of parameters (here, N). I
> just do not want to retype a new function each time for the cases I want
> 2 paramaters, or 10...or N.
>
> Keeping in mind that a function is defined as f[x_,y_]=Sin[x+y] (for
> instance), if the total number of parameter pairs is defined by the
> positive integer
>
> NumberOfModules (=5 for example)
>
> then the following expressions obviously create the left part of a
> potential definition statement (like "f[x_,y_]=Sin[x+y]"):
>
> In:= AddUnderscore2[varname_String] := varname <> "_";
>
> In:= function[w_,
>   Sequence @@ (ToExpression[
>         AddUnderscore2 /@ (ToString /@ Array[a, NumberOfModules])])
>
> give
>
> Out:= function[w_, a _, a _, a _, a _, a _]
>
> because NumberOfModules was chosen to be 5.(+notice the problematic
> blank in front of the _.)
>
> The right part could look as
>
> Sum[(a[i]*w^2)/(1 + a[i]^2*w^2), {i, 1, NumberOfModules}]
>
> Hence,
>
> function[x_, y_,
>   Sequence @@ (AddUnderscore2 /@ (ToString /@ Array[a,
> NumberOfModules]))] =
>
> Sum[(a[i]*w^2)/(1 + a[i]^2*w^2), {i, 1, NumberOfModules}]
>
> Looks like the definition of a formula.
>
> My problem is the last step...Mathematica does not (without surprize)
> look at the expression right above as it looks to "f[x_,y_]=Sin[x+y]".
>
> There must be a trick with ToExpression, ToString, or some other
> low-level Mathematica command.
>
> Thank you for any hint-
>
> Alexandre Romoscanu
>
> PS Please, mail me a copy of a potential reply, my newsgroup access is
> quite unreliable.

--
Roland Franzius

```

• Prev by Date: Re: Re: Path finding in graph theory, Lookig for your help
• Next by Date: how to round value in matrixs
• Previous by thread: Re: can Mathematica generate itself a function?
• Next by thread: Re: OOP Revisited