MathGroup Archive 2006

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

Search the Archive

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~




  • Prev by Date: Re: Iterated Function System
  • Next by Date: Re: RE: Re: Re: Limit of an expression?
  • Previous by thread: Re: Iterated Function System
  • Next by thread: Re: Iterated Function System