MathGroup Archive 2001

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

Search the Archive

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.
>



  • Prev by Date: Re: shuffling a deck of cards
  • Next by Date: Re: can Mathematica generate itself a function?
  • Previous by thread: RE: can Mathematica generate itself a function?
  • Next by thread: Re: can Mathematica generate itself a function?