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;
?iteraties

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]

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

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

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]

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]

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

ensemble[f_, X0_] :=  
        ListPlot[
Flatten[{ X0,  Map[f, X0]},  
            1], 
AxesLabel -> {"tijd", "snelheid\
"}, 
AspectRatio -> 
            1
];
?ensemble

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

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

beneden  =  
        Table[{2*Pi*n/200,  2*Pi*(4.15 - n/200)},  {n,  
            200}];
boven  =  
        Table[{2*Pi*n/200,  2*Pi*(4.85 - n/200)},  {n,  
            200}];
links  =  
        Table[{0,  2*Pi*(4.15 + n/1000)},  {n,  700}];
rechts  =  
        Table[{2*Pi,  2*Pi*(3.15 + n/1000)},  {n,  700}];
vierhoek  =  
        Flatten[{beneden,  boven,  links,  rechts},  1];
ensemble[fac[0.9,  16],  vierhoek]