Re: local variables - Module, For loop

• To: mathgroup at smc.vnet.net
• Subject: [mg113072] Re: local variables - Module, For loop
• From: Patrick Scheibe <pscheibe at trm.uni-leipzig.de>
• Date: Tue, 12 Oct 2010 04:30:05 -0400 (EDT)

```Hi,

usually you want to create/process a list inside a loop and need the return=
ed list of Table.
If you don't, just put a semicolon at the end. But when you need the values=
, then you need to store it explicitely
inside a for-loop. For instance

Block[{i, result == {}},
For[i == 1, i <== 100, i++,
AppendTo[result, {i, PrimeQ[i]}]
];
result
]

to check the first 100 numbers to be prime. Table syntax:

Table[{i, PrimeQ[i]}, {i, 100}]

Check the timing of a For loop with the first 30000 numbers gives

First@AbsoluteTiming@Block[{i, result == {}},
For[i == 1, i <== 30000, i++,
AppendTo[result, {i, PrimeQ[i]}]
];
result
]

22 Seconds here. Similar Table syntax for the first 1000000 (!!) numbers gi=
ves

First@AbsoluteTiming@Table[{i, PrimeQ[i]}, {i, 1000000}]

0.65 Seconds.

Or you want to iterate some calculation:

AbsoluteTiming@Block[{i, c == 0.4 + 0.3 I},
For[i == 0, i < 1000000, i++,
c == c^2 + 0.1 - 0.2 I
];
c
]

gives 3.19 seconds here and the equivalent Nest syntax

AbsoluteTiming@Nest[#^2 + 0.1 - 0.2 I &, 0.4 + 0.3 I, 1000000]

needs 0.13 seconds.. And so on, and so on..

Just try to avoid the usual loops and use the rich set of list operations a=
vailable.

Cheers
Patrick

On Oct 11, 2010, at 1:05 PM, Sebastian Schmitt wrote:

> Hi Patrick!
>
> Thanks for the suggestion. Does this scale to nested or very "long" For
> loops? The Table will return a List in any case:
>
> In[7]:== Table[, {i, 0, 10}]
>
> Out[7]== {Null, Null, Null, Null, Null, Null, Null, Null, Null, Null, \
> Null}
>
> Cheers,
>
> Sebastian
>
> Patrick Scheibe wrote:
>> Hi,
>>
>> then use Table, which is "more natural" and doesn't set the iterations v=
ariable.
>>
>> x == 10;
>> Table[Print[i], {i, 0, x}];
>>
>> Cheers
>> Patrick
>>
>> On Oct 11, 2010, at 11:15 AM, Sebastian Schmitt wrote:
>>
>>> Dear all!
>>>
>>> (I recycle my disclaimer.)
>>>
>>> I'm new to Mathematica with a background mostly in C++. Many times I
>>> have the impression that my style is not natural-Mathematica
>>> (Mathematicaesque so to say).
>>>
>>> If I have a For loop in a function like this:
>>>
>>> In[39]:== f[x_] :== Module[{},
>>> For[i == 0, i !== x, i++,
>>>  Print[i]
>>>  ]
>>> ]
>>>
>>> In[41]:== f[2]
>>>
>>> During evaluation of In[41]:== 0
>>>
>>> During evaluation of In[41]:== 1
>>>
>>> In[42]:== i
>>>
>>> Out[42]== 2
>>>
>>> I was surprised to find "i" being not local to the For loop. Do I have
>>> to keep track of all my throw-away-variables and put them in the list o=
f
>>> local variables of the Module? I find it pretty tedious. Is there a
>>> better way?
>>>