MathGroup Archive 2013

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

Search the Archive

Alternative to Table

  • To: mathgroup at smc.vnet.net
  • Subject: [mg120030] Alternative to Table
  • From: Iván Lazaro <gaminster at gmail.com>
  • Date: Tue, 5 Mar 2013 22:14:01 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-newout@smc.vnet.net
  • Delivered-to: mathgroup-newsend@smc.vnet.net

Dear group:

I'm trying to build a code that evolves a grid of dimension 2gridDim+1
over a time timeDim. I managed to build such a code using Table with
only one problem: when the value of timeDim is of thousands, the time
it takes to evaluate is absurd. I tried to find an alternative way to
write this code, using NestList withouth success. NestList is able to
have an interator if I write it like #[[1]]+1, but it doesn't work
when I use it as an element of a list.

I let here a toy working example. Any input would be most appreciated.

Iv=E1n.


gridDim = 2; timeDim = 3;
list = ConstantArray[0, {2, 2*gridDim + 1, timeDim}];

Table[list[[1, i, 1]] = Sin[-(gridDim + 1.) + i], {i, 1,
   2*gridDim + 1}];
Table[list[[2, i, 1]] = RandomReal[{0, 2*Pi}], {i, 1, 2*gridDim + 1}];


zUpdate[list_, t_] := Module[{lista},
   lista = {};
   lista = list;
   Table[If[i + 1 > 2*gridDim + 1,
     lista[[1, i, t + 1]] = list[[1, i, t]] (list[[2, 1, t]] -
list[[2, i - 1, t]]), If[
      i - 1 == 0,
      lista[[1, i, t + 1]] = list[[1, i, t]] (list[[2, i + 1, t]] -
list[[2, 2*gridDim + 1, t]]),
      lista[[1, i, t + 1]] = list[[1, i, t]] (list[[2, i + 1, t]] -
list[[2, i - 1, t]])]],
{i, 1, 2*gridDim + 1}];
   lista
   ];

pUpdate[list_, t_] := Module[{lista},
   lista = {};
   lista = list;
   Table[If[i + 1 > 2*gridDim + 1,
     lista[[2, i, t + 1]] = Mod[list[[1, i, t + 1]] (list[[2, 1, t]] -
list[[2, i - 1, t]]), 2*Pi],
           If[i - 1 == 0,
      lista[[2, i, t + 1]] = Mod[list[[1, i, t + 1]] (list[[2, i + 1,
t]] - list[[2, 2*gridDim + 1, t]]), 2*Pi],
      lista[[2, i, t + 1]] = Mod[ list[[1, i, t + 1]] (list[[2, i + 1,
t]] - list[[2, i - 1, t]]), 2*Pi]]], {i, 1, 2*gridDim + 1}];
   lista
   ];


Do[
  list = zUpdate[list, i];
  list = pUpdate[list, i];, {i, 1, timeDim - 1}];
list



  • Prev by Date: Re: How to find the roots of non linear equations
  • Next by Date: Re: Mathematica and Lisp
  • Previous by thread: Integrating piecewise functions.
  • Next by thread: Re: Alternative to Table