Re: odd delay problem
- To: mathgroup at smc.vnet.net
- Subject: [mg93172] Re: odd delay problem
- From: David Bailey <dave at Remove_Thisdbailey.co.uk>
- Date: Thu, 30 Oct 2008 02:00:35 -0500 (EST)
- References: <ge9f2e$973$1@smc.vnet.net>
Michael Mandelberg wrote:
> I am running v. 6.0.3.0
>
> I am having some weirdness where I will do something like:
>
> G=Array[f,100];
> For[i=1, i<=100, i++,
> f[i] = some calculation]
>
> Then I will look at the result:
>
> ListLinePlot[G]
>
> The strange thing is, if I rerun this, but change 'some calculation'
> to 'some other calculation', then rerun the plot, the plot stays the
> same. If I rerun the loop again, then the plot will change as
> expected. What's going on here? Why isn't it "taking" the first time?
>
Wow - this is a muddle arising out of several misconceptions! First,
here is a correct version of this code:
G=Array[0&,100];
For[i=1, i<=100, i++,
G[[i]] = some calculation]
Note that G is an array, and you might as well assign its elements
directly. However, the syntax for array subscripts requires double
square brackets.
Now lets look at what happens when your code runs. For convenience, I
have reduced the number of points to 5, and simply examine the value of
G rather than plot it. I am using multiples of i to represent the
various different calculations.
G = Array[f, 100]
In[2]:= G = Array[f, 5]
Out[2]= {f[1], f[2], f[3], f[4], f[5]}
At this point G is an array of symbolic elements because the function f
is undefined, but then you provide an element by element definition of f:
In[5]:= For[i = 1, i <= 5, i++, f[i] = 2 i];
G
Out[6]= {2, 4, 6, 8, 10}
Here G has been fully evaluated and taken the point by point definition
of f.
Now the second time that you evaluate your code - to do something else -
f already has a value (the old one!), so G never passes through the
symbolic intermediate step:
In[7]:= G = Array[f, 5]
Out[7]= {2, 4, 6, 8, 10}
In[8]:= For[i = 1, i <= 5, i++, f[i] = 20 i];
G
Out[9]= {2, 4, 6, 8, 10}
Of course, the loop has changed the value of f, so that if you execute
the code a third time, you will get the second calculation!
Finally, lets do the job properly:
G=Table[5 i,{i,1,5}]
The Table command generates 5 answers by iterating through i and returns
an array result which gets assigned to G.
If in doubt, look at the intermediate values in a calculation! Also
distinguish clearly between an array and a function.
David Bailey
http://www.dbaileyconsultancy.co.uk