can Mathematica generate itself a function?
- To: mathgroup at smc.vnet.net
- Subject: [mg31769] can Mathematica generate itself a function?
- From: "Romoscanu, Alexandre" <alexandre.romoscanu at imes.mavt.ethz.ch>
- Date: Sat, 1 Dec 2001 02:45:34 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
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.