Re: Iterated Function System
- To: mathgroup at smc.vnet.net
- Subject: [mg67705] Re: Iterated Function System
- From: "Scout" <Scout at nodomain.com>
- Date: Wed, 5 Jul 2006 04:17:57 -0400 (EDT)
- References: <e8d0uo$4dk$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
"JAMES ROHAL" <jrohal at wooster.edu> news:e8d0uo$4dk$1 at smc.vnet.net... >I am looking for a faster way to plot Iterated Function Systems in >Mathematica. Currently my method is using Barnsley's algorithm which >randomly chooses a transformation and applies it to a previous point to get >the next point. I then store the points in a list corresponding to the >transformation that was applied to it. Is there a faster way to program >this using functional programming in Mathematica? Thanks in advance. > > << Graphics`MultipleListPlot` > << Graphics`Colors` > > steps = 30000; > > M = {{1/2, 0}, {0, 1/2}}; > T1[x_] := {{0}, {0}} + M.x; > T2[x_] := {{1/2}, {0}} + M.x; > T3[x_] := {{1/4}, {Sqrt[3]/4}} + M.x; > > zi = {{Random[]}, {Random[]}}; > T1listPoints = {}; > T2listPoints = {}; > T3listPoints = {}; > > For[i = 1, i < steps, i++; > rand = Random[Integer, {1, 3}]; > Switch[rand, > 1, {zi = T1[zi], T1listPoints = Append[T1listPoints, Flatten[zi]]}, > 2, {zi = T2[zi], T2listPoints = Append[T2listPoints, Flatten[zi]]}, > 3, {zi = T3[zi], T3listPoints = Append[T3listPoints, Flatten[zi]]} > ]; > ]; > > graph1 = ListPlot[T1listPoints, PlotStyle -> {PointSize[0.00001], > RGBColor[1, 0, 0]}, DisplayFunction -> Identity]; > graph2 = ListPlot[T2listPoints, PlotStyle -> {PointSize[0.00001], > RGBColor[0, 1, 0]}, DisplayFunction -> Identity]; > graph3 = ListPlot[T3listPoints, PlotStyle -> {PointSize[0.00001], > RGBColor[0, 0, 1]}, DisplayFunction -> Identity]; > Show[{graph1, graph2, graph3}, DisplayFunction -> $DisplayFunction]; > > James Rohal > College of Wooster 2007 > > Hi James, I will try to sketch a very simple scheme of resolution for an IFS; I hope that this helps you. First of all, let's assume that f[z] and g[z] are two inverse functions of the complex variable z (make the attractor for the IFS) f[z_]:= *something* g[z_]:= *something* Ifs = Function[z, If[Random[] > 0.5, f[z], g[z]]]; Now, Ifs specifies the IFS. Iterates= ... ; The value of Iterates is the number of times we go through our feedback box of functions. XY = NestList[ Ifs, Random[], Iterates]; This gives a list of the results of applying Ifs to Random[] function , 0 through Iterates times. DataPlot = Table[{AbsolutePointSize[1], Point[{Re[XY[[i]]], Im[XY[[i]]]}]}, {i,1,Iterates}]; We are now ready to plot our data: Show[Graphics[DataPlot], Frame -> True, Axes -> False, AspectRatio -> Automatic, FrameLabel -> {"Re(z)", "Im(z)"}]; That's all! Regards, ~Scout~