Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2005
*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 2005

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

Search the Archive

Re: Re: Can't assign value to symbols

  • To: mathgroup at smc.vnet.net
  • Subject: [mg58493] Re: [mg58469] Re: Can't assign value to symbols
  • From: stephen layland <layland at wolfram.com>
  • Date: Mon, 4 Jul 2005 02:24:15 -0400 (EDT)
  • Mail-followup-to: Peter Pein <petsie@dordos.net>, mathgroup@smc.vnet.net
  • References: <da5jcd$243$1@smc.vnet.net> <200507030757.DAA18271@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com

and thus spake Peter Pein [2005.07.03 @ 04:08]:
> Lee Newman schrieb:
> > Thanks for the solutions.  I'm running with David Park's solution, but 
> > now realize there is one additional problem.  Once I've executed the 
> > statement  MapThread[(#1 = #2) & , {parameters[[1]], parameters[[3]]}] , 
> > because I've specified the first row of "parameters" as symbols, this 
> > row now loses the symbol names and takes on the assigned values, such 
> > that my attempt to execute the MapThread Statement again for a different 
> > set of values, e.g. parameters[[2]], fails.
[ ... ]
> use Clear to clear the assigned values:

As others have already suggested, this is a situation where
Mathematica's *Rule Replacements* shine.  Instead of setting and
clearing variables, it would be more efficient to apply diffierent
rules.

First off, translate your parameters list into a list of rules.
Here's a goofy way to do this ;) :

In[1]:= parameters = {{a,b,c},{1,2,3},{4,5,6},{7,8,9}};

In[2]:= rules = Thread/@
    Thread[Rule[First@parameters,Rest@parameters],List,{2}]

Out[2]= {{a -> 1, b -> 2, c -> 3}, {a -> 4, b -> 5, c -> 6}, {a -> 7, b
-> 8, c -> 9}}

Now, for each set of rules,do something with them:

In[3]:= f[a_, b_, c_] := x^a - (10 c b) Exp[Sin[c x]]

In[4]:= Plot[f[a,b,c]/.#,{x,0,10}]&/@rules

This is much cleaner than assigning and killing variables in a loop.  If
you'd rather work with assigned variables, consider passing your values
into another function, where you can work with localized
variables as you wish.  In other words, something like:

In[5]:= doSomething[{a_,b_,c_}]:=
    Plot[x^a - (10 c b) Exp[Sin[c x]],{x,0,10}]

In[6]:= doSomething/@Rest[parameters]

There are at least Aleph0 different ways to do things, but functional
and rule based approaches will almost always be the most efficient
in Mathematica.

Happy hacking.
--
/*------------------------------*\
|        stephen layland         |
|    Documentation Programmer    |
| http://members.wri.com/layland |
\*------------------------------*/


  • Prev by Date: Re: TimeSeries installation problem on Mac
  • Next by Date: Re: Re: how to find n in expression x^n using a pattern?
  • Previous by thread: Re: Can't assign value to symbols
  • Next by thread: Re: Can't assign value to symbols