Procedures voor het bestuderen van geitereerde afbeeldingen

Dit notebook kan worden gebruikt bij het bestuderen van recursierelaties zoals beschreven in hoofdstuk 3 van het dictaat `Modellen en Simulatie'

iteraties[f,x0,i,j] maakt een lijst van de waarden van de iteraties i tot en met j van de afbeelding f:x->f[a][x] met startwaarde x0. Hierbij is a een parameter.

\(\(\(iteraties[f_, x0_, i_, j_] := 
        Drop[NestList[f, x0, j], i] /; i ≤ j;\)\(
\)
    \)\)

Deze functie is al bekend uit iteratie.nb, we gebruiken ze om een (parameterafhankelijke) afbeelding in twee variabelen te itereren.

fa[a_][{x_,  y_}]  :=  {x + y,  
          a*y};
iteraties[fa[0.9],  {0,  1.45},  0,  50]

J = {{1, 1}, {0, a}};

Eigensystem[J]

faseportret[f,x0,i,j] toont voor de afbeelding f de baan met beginwaarde x0.

\(\(faseportret[f_, x0_, i_, j_, opts___] := \ 
        ListPlot[
Table[
            iteraties[f, x0, i, 
              j]], 
AxesLabel -> {"tijd", "snelheid"}, 
AspectRatio -> 1, 
          PlotStyle -> AbsolutePointSize[3], 
          opts
];\)\)

Een baan voor de stuiterende bal wordt verkregen door onderstaande opdracht uit te voeren.

faseportret[fa[0.9],  {0,  1.45},  0,  50]

Voor de `aangedreven' stuiterende bal wijzigen we de afbeelding als volgt.

fac[a_,  c_][{x_,  y_}]  :=  {2*Pi*
            FractionalPart[(x + y)/(2*Pi)],  
          a*y  -  c *Cos[x + y]};
iteraties[fac[0.9,  0],  {0,  1.45},  0,  
      50]

?FractionalPart

faseportret[fac[0.9,  0],  {0,  1.45},  0,  50]

iteraties[fac[0.9,  1],  {4,  6},  100,  150]

faseportret[fac[0.9,  1],  {4,  6},  100, 150]

Hoe moet men met negatieve waarden van (de tweede component van) f omgaan ?

\(\(\(
\)\(iteraties[fac[0.9, \ 4], \ {4, \ 6}, \ 0, \ 
      50]\)\)\)

facm[a_,  c_][{x_,  y_}]  :=  {2*Pi*
            FractionalPart[(x + y)/(2*Pi)],  
          Max[0,  a*y  -  c *Cos[x + y]]};
iteraties[facm[0.9,  4],  {4,  6},  0,  15]

faseportret[fac[0.9,  4],  {4,  6},  50, 500]

faseportret[facm[0.9,  4],  {4.5,  6},  
      10, 500]

facn past fac meermaals toe:

facn[a_, c_, n_][{x_, y_}] := 
        Nest[fac[a, c], {x, y}, n];

faseportret[
      facn[0.9,  4,  2],  {4.5,  6},  10, 500]

I.p.v.een beginwaarde vaak te itereren kunnen we ook het resultaat van f op vele beginwaarden bekijken.

\(\(ensemblec[f_, 
          X0_] := \ \((
xpl = 
            ListPlot[X0, \ PlotStyle -> Hue[1], \ 
              DisplayFunction -> Identity]; 
fxpl = 
            ListPlot[Map[f, X0], \ PlotStyle -> Hue[ .7], \ 
              DisplayFunction -> Identity]; 
Show[xpl, 
            fxpl, AxesLabel -> {"tijd", "snelheid"}, \ 
            AspectRatio -> 1, \ 
            DisplayFunction -> $DisplayFunction];
)\);\)\)

\(\(\(\ \)\(\(wolk\  = \ 
        Table[{4.5 + FractionalPart[n*Pi]/2, \ 
            16 + FractionalPart[9.9*n*Pi]}, \ {n, \ 100}];\)

    ensemblec[fac[0.9, 16], \ \ wolk]\)\)\)

Probeer, uitgaande van onderstaand voorbeeld, vierhoeken te vinden die aanleiding geven tot een hoefijzer.

ynw = 3.85;  ydrop = 1;  height =  .7;
xw = 0; width = 1;
alph = 0.9; 
    gam = 16;
  
ysw = ynw - height; yne = ynw - ydrop; 
    yse = yne - height;
beneden  =  
        Table[{xw + width*2*Pi*n/200,  
            2*Pi*(ysw - ydrop*n/200)},  {n,  200}];
boven  =  
        Table[{xw + width*2*Pi*n/200,  
            2*Pi*(ynw - ydrop*n/200)},  {n,  200}];
links  =  
        Table[{xw,  2*Pi*(ysw + height*n/1000)},  {n,  
            1000}];
rechts  =  
        Table[{xw + width*2*Pi,  2*Pi*(yse + height*n/1000)},  {n,  
            1000}];
vierhoek  =  
        Flatten[{beneden,  boven,  links,  rechts},  
          1];
  
ensemblec[facn[alph,  gam, 1], vierhoek];