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

Modeling and Array Problem

  • To: mathgroup at smc.vnet.net
  • Subject: [mg58732] Modeling and Array Problem
  • From: Sycamor at gmail.com
  • Date: Sat, 16 Jul 2005 01:03:41 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

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: Re: Complement replacement
  • Next by Date: Improper use of slot
  • Previous by thread: Re: Notebook Style problems?
  • Next by thread: Re: Modeling and Array Problem