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