Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2008

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

Search the Archive

Re: Set::setps problems

  • To: mathgroup at smc.vnet.net
  • Subject: [mg90270] Re: Set::setps problems
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Fri, 4 Jul 2008 03:56:39 -0400 (EDT)
  • Organization: The Open University, Milton Keynes, UK
  • References: <g4i94f$3d2$1@smc.vnet.net>

� wrote:

> I found troubles with such a loop:
> 
> T = Table[{s, 0}, {s, -Pi, Pi, step}];
> 
> For[i = 1, i <= Length[UU], i += 1,
>   UU[[i]][[2]] += 5];
> 
> (it's just the example of some general idea of changing values of
> table's elements inside a loop)
> 
> And Mathematica returned:
> 
> Set::setps: UU[[i]] in the part assignment is not a symbol. >>
> Set::setps: UU[[i]] in the part assignment is not a symbol. >>
> Set::setps: UU[[i]] in the part assignment is not a symbol. >>
> General::stop: Further output of Set::setps will be suppressed during \
> this calculation. >>

You cannot use the shortcut += in this case because Mathematica 
mismatches the value of the symbol for the symbol itself when expanding 
the LHS (say, UU[[1,2]] == 5, so UU[[1,2]] += 5 is rewritten as 5 = 5 + 
5 rather than the intended UU[[1,2]] = 5 + 5). So just write the 
expanded version UU[[i, 2]] = UU[[i, 2]] + 5.

In[1]:= With[{step = .5}, UU = Table[{s, 0}, {s, -Pi, Pi, step}]]

For[i = 1, i <= Length[UU], i++, UU[[i, 2]] = UU[[i, 2]] + 5]

UU

Out[1]= {{-3.14159, 0}, {-2.64159, 0}, {-2.14159, 0}, {-1.64159,
   0}, {-1.14159, 0}, {-0.641593, 0}, {-0.141593, 0}, {0.358407,
   0}, {0.858407, 0}, {1.35841, 0}, {1.85841, 0}, {2.35841,
   0}, {2.85841, 0}}

Out[3]= {{-3.14159, 5}, {-2.64159, 5}, {-2.14159, 5}, {-1.64159,
   5}, {-1.14159, 5}, {-0.641593, 5}, {-0.141593, 5}, {0.358407,
   5}, {0.858407, 5}, {1.35841, 5}, {1.85841, 5}, {2.35841,
   5}, {2.85841, 5}}


Note that a *much* more efficient way of doing the above is to 
manipulate a list as a whole:

In[4]:= UU[[All, 2]] = UU[[All, 2]] + 5
UU

Out[4]= {10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10}

Out[5]= {{-3.14159, 10}, {-2.64159, 10}, {-2.14159, 10}, {-1.64159,
   10}, {-1.14159, 10}, {-0.641593, 10}, {-0.141593, 10}, {0.358407,
   10}, {0.858407, 10}, {1.35841, 10}, {1.85841, 10}, {2.35841,
   10}, {2.85841, 10}}

You should spend some time familiarizing yourself with "List 
Manipulation" and "Functional Programming", as starters, to get an 
overall idea on how to program efficiently with Mathematica.

guide/ListManipulation

guide/FunctionalProgramming


Regards,
-- Jean-Marc


  • Prev by Date: Re: Anomaly? or at least a surprise.
  • Next by Date: Re: Set::setps problems
  • Previous by thread: Re: Set::setps problems
  • Next by thread: Re: Set::setps problems