Re: Modeling and Array Problem
- To: mathgroup at smc.vnet.net
- Subject: [mg58744] Re: Modeling and Array Problem
- From: Ken Levasseur <kenneth_levasseur at uml.edu>
- Date: Sun, 17 Jul 2005 03:03:57 -0400 (EDT)
- References: <200507160503.BAA14933@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Peter: I noticed that you constructed the list {{0,0},{1,1},{2,4},{3,9},..., {100,10000}} using a Do loop. It's much more efficient to use Map: In[53]:= Map[{#1, #1^2} & , Range[0, 100]] Out[53]= {{0,0},{1,1},{2,4},{3,9},{ 4,16},{5,25},{6,36},{7,49},{8,64},{9,81},{10,100},{11,121}, {12,144},{13, 169},{14,196},{15,225},{16,256},{17,289},{18,324},{19,361}, {20,400},{21, 441},{22,484},{23,529},{24,576},{25,625},{26,676},{27,729}, {28,784},{29, 841},{30,900},{31,961},{32,1024},{33,1089},{34,1156},{ 35,1225},{36,1296},{37,1369},{38,1444},{39, 1521},{40,1600},{41,1681},{42,1764},{43,1849},{ 44,1936},{45,2025},{46,2116},{47,2209},{48, 2304},{49,2401},{50,2500},{51,2601},{52,2704},{ 53,2809},{54,2916},{55,3025},{56,3136},{57, 3249},{58,3364},{59,3481},{60,3600},{61,3721},{62,3844}, {63,3969},{64,\ 4096},{65,4225},{66,4356},{67,4489},{68,4624},{69,4761},{70,4900}, {71,5041},{\ 72,5184},{73,5329},{74,5476},{75,5625},{76,5776},{77,5929},{78,6084}, {79,6241}\ ,{80,6400},{81,6561},{82,6724},{83,6889},{84,7056},{85,7225}, {86,7396},{87,\ 7569},{88,7744},{89,7921},{90,8100},{91,8281},{92,8464},{93,8649}, {94,8836},{\ 95,9025},{96,9216},{97,9409},{98,9604},{99,9801},{100,10000}} The pure function {#1, #1^2} & produces one such pair and you just map that over the integers from 0 to 100. On Jul 16, 2005, at 1:03 AM, Sycamor at gmail.com wrote: > Hello, > > I am a high school student and am interning/volunteering at a > university over the summer. My ultimate goal is to model the movement > of charge in a Nickel Metal Hydride Sphere using Mathematica. This > goal is beyond my ability as it requires calculus and differential > equations and so forth. But I am to progress as best I can, using > iterative processes to replace calculus where possible. The professor > I am working with has started me with the simpler task of finding the > curvature of a set of data points (in this first easy case, the 'data' > is the values of 101 points of the x^2 function). > > While programming, I have found it necessary to change the value of > certain elements of an array of ordered pairs, but have been unable to > do so. > > In[1]:= array = {{1,1},{2,2},{3,3},{4,4},{5,5}}; > In[2]:= array[[1]][[1]] > Out[2]= 1 > In[2]:= array[[1]][[1]] = 42 > Out[2]= Set::setps: test in assignment of part is not a symbol. > > I suppose the error arises when I attempt to set the numerical > contents > of the array equal to a certain value. Is there anyway to simply > overwrite the element at a certain address? Why does the syntax used > above seem to work for lists? > > In[3]:= list = {1,2,3,4,5}; > In[4}:= list[[1]] > Out[4]= 1 > In[5]:= list[[1]] = 42; > In[6]:= list > Out[6]= {42,2,3,4,5} > > I have included what I have written so far at the end of this message > to put my problem in context. As I am new to Mathematica, I do not > know hoe to write elegant, concise programs using the array of > powerful > built in functions, so I appologize for my clunky code. There is > probably a much easier way to accomplish my task. > > I would appreciate any help on this matter. > > > Thank you, > > Peter Hedman > > > > > > > Bellow is what I have written so far. The comments are mostly meant > for myself, and probably do not make much sense. > > g = 1; > (*sets value of liberated proton constant*) > > d=0.1; > (*sets value of diffusion constant*) > > v= 0.1; > (*sets value of boundry velocity*) > > a = 0.1; > (*sets the value of constant \[Alpha]*) > > j = 0; > > (*sets the initial value of j. This step shouldn't be necessary*) > > rprevb=rprev = Table[0z, {z,0,100}]; > > r = 0; s = 0; > > (Do[rprev[([q])] = {r, s^2}; (r++); (s++), {q, 1, 101}];) > > (*These three lines create the initial list of ordered pairs*) > > Do[rprevb[[q]]={0,0}, {q,1,101}] > > jmax = 100; > (*initially sets the maximum horizontal range*) > > iter[n_]:= If[ > n==jmax , (rprev[[n+1]][[2]] + v*(g+rprev[[n+1]][[2]]) - > d*(rprev[[n+2]][[2]]-rprev[[n+1]][[2]])), (rprev[[n+1]] > [[2]]+ > a*(rprev[[n]][[2]]-2rprev[[n+1]][[2]]+rprev[[n+2]][[2]]))] ; > > (*defines transformation function*) > > dim =Dimensions[rprev]; > > dimb = Dimensions[rprevb]; > > Print["Dimensions of initial list = ",dim] > > Print["Dimensions of initial list = ",dimb] > > initialplot = ListPlot[rprev] > > Do[Do[rprevb[[(j+1)]][[2]]=iter[j]; Print[rprevb]; {j,0,jmax,1}]; > rprev=rprevb; Print["time = ",t]; Print["jmax = ",jmax ]; > ListPlot[rprev]; > jmax--,{t,1,10}] > > (*With every iteration of the outside loop, > jmax is decremented by one. As iterations progress to flatten the > curve, > the boundry moves. Should these two processes take place in this > way? > It appears this is not the ideal model, but it will work for > now.*) > > *********************************** Ken Levasseur Mathematical Sciences UML http://faculty.uml.edu/klevasseur Please avoid sending me Word or PowerPoint attachments. See http://www.gnu.org/philosophy/no-word-attachments.html
- References:
- Modeling and Array Problem
- From: Sycamor@gmail.com
- Modeling and Array Problem