Re: can Mathematica generate itself a function?
- To: mathgroup at smc.vnet.net
- Subject: [mg31796] Re: [mg31769] can Mathematica generate itself a function?
- From: Anton Antonov <antonov at wolfram.com>
- Date: Sun, 2 Dec 2001 04:25:20 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
Dear Alexandre Romoscanu, I think the definition bellow solves your problem. ** This defines a "function definitor" In[613]= Clear[MakeDefinition] MakeDefinition[fname_, args_, body_] := Evaluate[fname @@ Map[Pattern[#1, Blank[]] &, args]] := body ** This defines a new function "f1" with body Sin[x + y] In[614] Clear[f1] MakeDefinition[f1, {x, y}, Sin[x + y]] ** These bellow try f1 In[615]:= ?f1 Global`f1 f1[x_, y_] := Sin[x + y] In[616]:= f1[Pi/4,Pi/4] f1[m,n] Out[616]= 1 Out[617]= Sin[m+n] Best Anton ============================================================== Anton Antonov Antonov, PhD ***** Wolfram Research Inc. http://www.imm.dtu.dk/~uniaaa *** tel +1 217 398 0700 #782 ============================================================== Give me wings and I will crawl faster! -------------------------------------------------------------- On Sat, 1 Dec 2001, 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[1]:= AddUnderscore2[varname_String] := varname <> "_"; > > In[2]:= function[w_, > Sequence @@ (ToExpression[ > AddUnderscore2 /@ (ToString /@ Array[a, NumberOfModules])]) > > > give > > Out[2]:= function[w_, a[1] _, a[2] _, a[3] _, a[4] _, a[5] _] > > 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 > Grad Student, ETH Zurich > > PS Please, mail me a copy of a potential reply, my newsgroup access is > quite unreliable. >