Re: Arnold's Cat Map
- To: mathgroup at smc.vnet.net
- Subject: [mg5326] Re: [mg5314] Arnold's Cat Map
- From: Allan Hayes <hay at haystack>
- Date: Wed, 27 Nov 1996 01:47:41 -0500
- Sender: owner-wri-mathgroup at wolfram.com
We can speed up Soluton 1 (attached) by a factor of 17 by using NestList and matrix multiplication. The change to NestList accounts for most of this: it accumulates the data needed for each frame when computing the last one instead of starting from scratch every time. The code is easily extended to 3D: NEW CODE A=(Table[{20,y},{y,20,80}]~Join~Table[{x,20},{x,20,80}])/101; Image[A_] := Show[ Graphics[ {PointSize[.03],Text[i++,{.95,.95},{1,0}],Map[Point,A]} ], AspectRatio->Automatic,PlotRange->{{0,1},{0,1}},Frame->True, FrameTicks->None ]; M = {{1,1},{1,2}}; i=0; Image/@NestList[Mod[#.M,1]&,A,25] Timing on NeXT Turbo is 5.55 seconds The timing for Solution 1 is 95.6 seconds To see the computation calculated frame by frame (as happens with Solution 1 then we can use the following variant to the last line NestList[(Image[#];#)&[Mod[#.M,1]]&,Image[A];A,25] Allan Hayes hay at haystack.demon.co.uk http://www.haystack.demon.co.uk >>>>>>>>>> Begin forwarded message: >From: wilson figueroa <wfigueroa at mosquito.com> >Subject: [mg5314] Arnold's Cat Map >Organization: Mosquito Net, Inc. Hi group, I am attempting to implement Arnold's Cat Map using Mathematica and have received two excellent solutions. These are shown below. ------------------------------------------------------------------- Soluton 1: A=(Table[{20,y},{y,20,80}]~Join~Table[{x,20},{x,20,80}])/101; T[{x_,y_}]:=Mod[{x+y,x+2*y},1] MFold[A_,T_,i_]:=Fold[Map[T,#]&,A,Table[A,{i}]] Image[A_,i_]:=\ Show[Graphics[{PointSize[1/30],Text[i,{.95,.95},{1,0}],Map[Point,A]}], AspectRatio->1,PlotRange->{{0,1},{0,1}},Frame->True,FrameTicks->None] Table[Image[MFold[A,T,i],i],{i,0,25}] ------------------------------------------------------------------- Solution 2: PointQ[p_] := VectorQ[p, NumberQ] && Length[p] == 2; m = {{1,1}, {1,2}}; cat[x_?PointQ] := Mod[m.x, 1]; cat2[x_, 0] := x cat[x_, 1] := cat[x] cat2[x_, n_] := cat[cat2[x, n-1]] cat2[{27/76, 58/76}, 9] \!\({27\/76, 29\/38}\) period[x_] := Module[{i=2}, While[Nest[cat,x, i]=!= x, i++]; i] period[{3/101, 6/101}] 25 period[{27/76, 58/76}] 9 catgraph[r_, n_] := Module[{line, line2}, line = Table[{i, i}/r,{i, 0, r-1}]; line2 = Apply[Point[{#1, #2}]&, line, 1]; Show[Graphics[line2/.x_?PointQ :> cat2[x, n]], Frame->True, AspectRatio->Automatic ] ] Table[catgraph[101,i],{i,0,25}] --------------------------------------------------------------------- I would like one iteration more which allows me to implement this solution using any color image. I would especially like to use a color image of a cat. There is a great cat image in the new MMA v 3.0 manual. Can someone proficient with handling images help here? Also, does anyone know if the Arnold's Cat Map transformation is applicable in n-dimensions, particurlarly in three dimensions as this should be producable graphically using MMA v 3.0. I would like to thank individuals who have provided the solutions shown above. Both have very nice features and are very efficient. Thank you to anyone in the group who can provide help. Sincerely, Wilson Figueroa wfiguero at mosquito.com