Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2001
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2001

[Date Index] [Thread Index] [Author Index]

Search the Archive

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.


  • Prev by Date: Re: Very difficult axes inversion?? How to???
  • Next by Date: Re: Behaviour of Plot/ListPlot & Export
  • Previous by thread: Re: Export to WMF file and EPS Export, Wrong characters
  • Next by thread: RE: can Mathematica generate itself a function?