Enige procedures voor het bestuderen van iteraties

Dit notebook kan worden gebruikt bij het bestuderen van recursierelaties zoals beschreven in hoofdstuk 1 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 functie 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

Ga zelf na hoe NestList  en Drop werken, bijvoorbeeld door de onderstaande codes uit te voeren:

NestList[f, x0, 4]

Drop[{1, 2, 3, 4}, 2]
Drop[{1, 2, 3, 4},  -2]

We kunnen de functie iteratie gebruiken om een aantal iteraties van het op het college besproken Verhulst-model, ook we; bekend als model voor logistische groei, te bereken voor een gegeven startwaarde en een gegeven waarde van de parameter a:

logist[a_][x_] :=  
        a x (1 - x);
iteraties[logist[3], 0.5, 3, 6]

f[x_, y_] :=  {y,  1.1*y +  0.1 x}

f[2, 3]

Hetzelfde kun je doen voor het, eveneens op het college besproken, model van Ricker, waarin populatiegroei beschreven wordt door een recursie van de vorm

x[n+1]=k Exp[-x[n]/N] x[n]

Kies waarden voor de parameters k en N en voor de beginwaarde x0, en gebruik interaties en ListPlot om een plot van de ontwikkeling van een populatie volgens dit model te maken.

bifurcatie[f,x0,i,j,amin,amax,da] maakt een bifurcatieplot (zie dictaat `Modellen en Simulatie', p.12-13) voor de functie f[a]:x -> f[a][x], waarbij de parameter a loopt van amin tot amax in stapjes da.
De plot toont, voor iedere waarde van a, de waarden van de iteraties i tot en met j van de functie f[a], met startwaarde x0.
Gebruik  eventueel de help-browser om de werking van Flatten, Table en Transpose op te zoeken.

\(\(bifurcatie[f_, x0_, i_, j_, amin_, amax_, da_] := \ 
        ListPlot[
Flatten[
Table[
Transpose[{Table[a, {j - i + 1}], 
                  iteraties[f[a], x0, i, j]}], 
{a, amin, 
                amax, da}]
, 
            1], 
AxesLabel -> {"parameter", "x(i)...x(j)"}, 
AspectRatio -> 
            1
];\)\)

?bifurcatie

Een bifurcatieplot voor het Verhulst model wordt verkregen door onderstaande opdracht uit te voeren. Ga zelf na welke iteraties worden geplot, voor welke waarden van a.

bifurcatie[logist, 0.5, 50, 100, 2, 4, 2/400]

iteratiediagram[f,x0,i,j] produceert een lijst bestaande uit de startwaarde x0 gevolgd door j iteratiewaarden voor de functie f[a]:x->f[a][x], en plot het bijbehorende iteratiediagram (zie dictaat `Modellen en Simulatie', p8.).

\(\(\(iteratiediagram[f_, x0_, i_] := 
        Module[{it = iteraties[f, x0, 0, i], \ 
            xoud\ , \ \ xnieuw, 
plotf = 
              Plot[f[x], {x, 0, 1}, 
                DisplayFunction -> 
                  Identity], 
plotdiag = 
              Plot[x, {x, 0, 1}, PlotStyle -> Hue[0.65], 
                DisplayFunction -> 
                  Identity], 
plotw\ }, 

Print[
            it]; 

For[
n = 1; plotw = {\ 
                Graphics[{Hue[1], PointSize[0.025], 
                    Point[{it[\([1]\)], 
                        it[\([1]\)]}], 
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RGBColor[0, \ 0, \ 0], \ Text[
                      0, \ {it[\([1]\)], 
                        0.015}]\ \ }]}, 
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 
n ≤ 
              i, 
\(n++\), 
xoud = 
              it[\([n]\)]; 
xnieuw = 
              it[\([n + 
                    1]\)]; 
plotw = {
plotw, 
Graphics[{Hue[1], 
                    Line[{{xoud, xoud}, {xoud, 
                          xnieuw}}], 
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ Line[{{xoud, xnieuw}, {xnieuw, 
                          xnieuw}}], 
\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ RGBColor[0, \ 0, \ 0], \ 
                    Text[n, \ {xnieuw, 
                        0.015}]}]
\ \ \ \ \ \ \ \ \ \ \ \ \ \ }
\ \ \ \ \ ]; 

Show[
{plotf, 
              plotdiag, plotw}, 
AspectRatio -> 
              1, 
DisplayFunction -> $DisplayFunction, 
PlotRange -> {{0, 1}, {0, 
                  1}}, 
PlotLabel -> "Iteratiediagram"
]
];\)\(
\)
    \)\)

?iteratiediagram

Onderstaande opdracht levert een iteratiediagram voor het Verhulst model op:

iteratiediagram[logist[3.8],  0.2,  5]

Meerstapsrecursies:

boom[x_,  y_]  :=  {y,  3*x + 4*y}

meeriteraties[f_, x0_, i_, j_] := 
        Drop[NestList[f,  x0,  j], i] /; i ≤ j;

meeriteraties[boom,  {1,  1},  1,  5]