Mathematica 9 is now available
Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
2005
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 2005

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

Search the Archive

Re: Modeling and Array Problem

  • To: mathgroup at smc.vnet.net
  • Subject: [mg58746] Re: Modeling and Array Problem
  • From: Bob Hanlon <hanlonr at cox.net>
  • Date: Sun, 17 Jul 2005 03:03:59 -0400 (EDT)
  • Reply-to: hanlonr at cox.net
  • Sender: owner-wri-mathgroup at wolfram.com

array[[m]][[n]] can be written more simply as array[[m,n]]

This latter form must be used to do what you are attempting

array={{1,1},{2,2},{3,3},{4,4},{5,5}};

array[[1,1]]=42;

array

{{42, 1}, {2, 2}, {3, 3}, {4, 4}, {5, 5}}

Here are some equivalent simpler ways of doing things

Table[0 z,{z,0,100}]==Table[0,{z,0,100}]==Table[0,{101}]

True

r=0;s=0;
(Do[rprev[[q]]={r,s^2};(r++);(s++),{q,1,101}];)

rprev==Table[{n,n^2},{n,0,100}]

True

Do[rprevb[[q]]={0,0},{q,1,101}]

rprevb==Table[{0,0},{101}]

True


Bob Hanlon

> 
> From: Sycamor at gmail.com
To: mathgroup at smc.vnet.net
> Date: 2005/07/16 Sat AM 01:03:41 EDT
> Subject: [mg58746]  Modeling and Array Problem
> 
> 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.*)
> 
> 


  • Prev by Date: Improper use of slot
  • Next by Date: How to create a new Form
  • Previous by thread: Re: Modeling and Array Problem
  • Next by thread: Re: Modeling and Array Problem