Re: lists of variables
- To: mathgroup at smc.vnet.net
- Subject: [mg58255] Re: lists of variables
- From: Paul Abbott <paul at physics.uwa.edu.au>
- Date: Sat, 25 Jun 2005 01:56:14 -0400 (EDT)
- Organization: The University of Western Australia
- References: <d9630u$q1t$1@smc.vnet.net><d9gb4h$sud$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
In article <d9gb4h$sud$1 at smc.vnet.net>, "Ray Koopman" <koopman at sfu.ca>
wrote:
> dh wrote:
> > Hi Heath,
> > You already got many answers, but I think the solution to create
> > a variable name as a string and using ToExpression is not the
> > appropriate way to do this.
> > Array[..] is made for this purpose.
>
> I agree that using ToExpression to construct code is awkward and tends
> to obscure what the code is, but for functions such as Minimize, that
> require names of variables in their calling sequence, how else would
> you handle problems in which the number of variables is not fixed?
I'm not sure that I follow you. You can pass the necessary variables to
such functions. For example, here is a function that generates a random
polynomial in n variables:
f[x_List] := Plus @@ Apply[Times,
Outer[Plus, x, Table[Random[Integer, {-5, 5}], {Length[x]}]], {1}]
For example,
SeedRandom[1]
g = f[{x,y}]
h = f[{x,y,z}]
Here is a routine that finds the mimimum over a specified domain.
Minimize[{g, Thread[-2 < Variables[g] < 2]} , Variables[g]]
Minimize[{h, Thread[-2 < Variables[h] < 2]} , Variables[h]]
And here is a routine for numerical minima:
Nmin[f_, {x_List, a_List}] :=
FindMinimum[f, Evaluate[Sequence @@ Transpose[{x, a}]]]
Nmin[g, {Variables[g], {0,1}}]
Nmin[h, {Variables[h], {0,1,2}}]
Of course, you cannot use Variables if there are other parameters in the
functions.
Cheers,
Paul
--
Paul Abbott Phone: +61 8 6488 2734
School of Physics, M013 Fax: +61 8 6488 1014
The University of Western Australia (CRICOS Provider No 00126G)
AUSTRALIA http://physics.uwa.edu.au/~paul
http://InternationalMathematicaSymposium.org/IMS2005/