Re: save value in array during loop
- To: mathgroup at smc.vnet.net
- Subject: [mg70493] Re: save value in array during loop
- From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
- Date: Wed, 18 Oct 2006 04:16:15 -0400 (EDT)
- Organization: The Open University, Milton Keynes, UK
- References: <eh20uf$2nj$1@smc.vnet.net>
schaa at geo.uni-koeln.de wrote: > Hi there, > > I am new to mathematica and I have the following problem: > > save a certain value in an array calculated during a loop. > > My attempt: > > For[i=0,i<=12, > rho = i*25; > V[[i]] = UserFunction[0.5]; > i++] > > rho has the role of a global variable and is used in several other functions. > UserFunction stands for a function which in turn calls other functions. > V is the array of dimension 13 from 0 to 12. > > The code above does not work. What needed to be changed to make it > work? > > Thanks a lot > -Ralf > Hi Ralf, Contrary to some other language like C, Mathematica indices start at 1 not 0. Therefore, your list V has its first value in V[[1]], its second value in V[[2]], etc. Now the tricky part is that V[[0]] exists and is a perfectly legal expression; however it does not mean the first element of V but the head of the expression V, which is List before being replaced. So what you have at the end is not a list/array anymore, but another kind of expression. So you must replace your iteration from 0 to 12 by an iteration from 1 to 13. In[1]:= V = Range[13] Out[1]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13} In[2]:= Head[V] Out[2]= List In[3]:= V[[0]] Out[3]= List In[4]:= For[i = 0, i <= 12, rho = i*25; V[[i]] = UserFunction[0.5 + i]; i++] In[5]:= V Out[5]= UserFunction[0.5][UserFunction[1.5], UserFunction[2.5], UserFunction[3.5], UserFunction[4.5], UserFunction[5.5], UserFunction[6.5], UserFunction[7.5], UserFunction[8.5], UserFunction[9.5], UserFunction[10.5], UserFunction[11.5], UserFunction[12.5], 13] In[6]:= Head[V] Out[6]= UserFunction[0.5] In[7]:= V[[0]] Out[7]= UserFunction[0.5] In[8]:= V = Range[13] Out[8]= {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13} In[9]:= For[i = 1, i <= 13, rho = i*25; V[[i]] = UserFunction[0.5 + i]; i++] In[10]:= Information["V", LongForm -> False] V V = {UserFunction[1.5], UserFunction[2.5], UserFunction[3.5], UserFunction[4.5], UserFunction[5.5], UserFunction[6.5], UserFunction[7.5], UserFunction[8.5], UserFunction[9.5], UserFunction[10.5], UserFunction[11.5], UserFunction[12.5], UserFunction[13.5]} Regards, Jean-Marc