Materiaal voor simulatie van een populatie Neushoorns

De volgende cel is tot initialisatie-cel gemaakt. Die voer je normaal gesproken eerst uit, om gezeur met shadow te voorkomen.

Needs["Statistics`DiscreteDistributions`"];
Needs["Graphics`Graphics`"];

poisson::usage := "poisson[gemd] geeft een geheel getal getrokken uit \
een Poissonverdeling met gemiddelde gemd."

poisson[gemiddeld_] := 
        If[gemiddeld > 0, Random[PoissonDistribution[gemiddeld]], 
          0];

?poisson

Meestal is

5 x  ==  Sum[x, {5}]

Toch is er verschil tussen

5  poisson[1.5]

en

Sum[poisson[1.5], {5}]

Hoe komt dat?

survive::usage := "survive[p] geeft 1 met kans p en anders 0."

survive[kans_] := If[Random[] < kans, 1, 0]

Een voorbeeld.

BarChart[Table[survive[ .3], {40}]]

Als we vijf neushoorns hebben, elk met overlevingskans 3/4 in dit seizoen, welke uitdrukking modelleert dan het aantal neushoorns in het volgende seizoen:

5 survive[3/4]

of

Sum[survive[3/4], {5}]

?

We kijken naar een heel eenvoudig model, van een diersoort met maar twee jaarklassen. (Zodra ze twee jaar oud zijn worden deze beesten geslacht.)

MatrixForm[lesliematrix = {{0, 5/2}, {2/5, 0}}]

Wat betekent deze Lesliematrix?

Ga na wat de volgende procedure doet, en maak een toepasselijke usage message.

lesliesim[huidigePopulatie_, lesliematrix_] := 
      Module[{volgendePopulatie, i, j, 
          maxLeeftijd = 
            Length[lesliematrix]}
, 
volgendePopulatie = 
          0*huidigePopulatie; 
Do[
volgendePopulatie[[1]] = 
            volgendePopulatie[[1]] + 
              Sum[poisson[
                  lesliematrix[[1, 
                      i]]]
, 
{huidigePopulatie[[i]]}]
, 
{i, 
            maxLeeftijd}
]; 
Do[
          volgendePopulatie[[i]] = 
            Sum[survive[
                lesliematrix[[i, 
                    i - 1]]]
, 
{huidigePopulatie[[i - 
                      1]]}]
, 
{i, 2, 
            maxLeeftijd}
]; 
volgendePopulatie
]

We kijken eens naar het verloop van de totale populatie.

For[pop = {40, 30}; his = {}; i = 1, i ≤ 100, 
      pop = lesliesim[pop, lesliematrix]; i++, his = Append[his, pop]]; 
    BarChart[Apply[Plus, his, 1]]