Porovnani spojiteho a diskretniho rustu populace
----------------------------------------
Rust populace n s casem t
> | with(plots): |
> | p :=0.1;
na_zacatku := 10; pocet_kroku := 25; |
> | sys := {diff(n(t),t)=p*n(t)}; |
> | pocatecni := {n(0)= na_zacatku}; |
> | reseni := combine(dsolve(sys union pocatecni,{n(t)})); |
> | q:= combine(dsolve(sys union pocatecni,{n(t)}, type=numeric, range=0..pocet_kroku)): |
> | odeplot(q, [[t,n(t),color=orange, thickness=4]]); |
> | spojity_graf := %; |
--------------------------------------------
Diskretni model neomezeneho rustu
> | rodne_cislo := 0;
cas := 0; populace := []; pravdepodobnost_narozeni := exp(0.1)-1; |
Jedinec je charakterizovan jednoznacne rodnym cislem.
Dale je uvedeny cas narozeni a rodic urceny rodnym cislem.
Nasledujici procedura vytvori jedince bez rodice (rodic tak ma cislo 0)
a prida ho do populace:
> | stvorit := proc()
global populace, rodne_cislo, cas; local dite; rodne_cislo := rodne_cislo + 1; dite := [rodne_cislo, cas, 0]; populace := [op(populace),dite]; end proc; |
Nasledujici procedura prida do populace dite narozene rodici:
> | porodit := proc(rodic)
global populace, rodne_cislo, cas; local dite; rodne_cislo := rodne_cislo + 1; dite := [rodne_cislo, cas, rodic]; populace := [op(populace),dite]; end proc; |
V casovem kroku cas pokroci o 1
a kazdy jiz existujici jedinec ma prilezitost
porodit s pravdepodobnosti pravdepodobnost_narozeni dite.
Vzdy se vypise aktualni cas a za nim veskere udaje o populaci v tom case.
> | casovy_krok := proc()
global populace, pravdepodobnost_narozeni, cas; local n,i; cas := cas +1; n := nops(populace); for i from 1 to n do if rand(1..1000)()<1000*pravdepodobnost_narozeni then porodit(populace[i,1]); end if; end do; cas, populace; end proc; |
V nasledujicim je mozno testovat beh programu nejdrive vytvorenim
> | vyvoj_populace := proc(na_zacatku, pocet_kroku)
global pravdepodobnost_narozeni, populace, rodne_cislo, cas; local scitani_populace, i, j; rodne_cislo := 0; cas := 0; populace := []; for i from 1 to na_zacatku do stvorit() end do; scitani_populace := []; for j from 1 to pocet_kroku do casovy_krok(); scitani_populace := [op(scitani_populace), nops(populace)]; end do; listplot(scitani_populace); end proc; |
> |
> | vyvoj_populace(na_zacatku, pocet_kroku); |
> | populace; |
> | display(spojity_graf, seq(vyvoj_populace(na_zacatku, pocet_kroku),k=1..50)); |
> | vysledek_vyvoje_populace := proc(na_zacatku, pocet_kroku)
global pravdepodobnost_narozeni, populace, rodne_cislo, cas; local i, j; rodne_cislo := 0; cas := 0; populace := []; for i from 1 to na_zacatku do stvorit() end do; for j from 1 to pocet_kroku do casovy_krok(); end do; nops(populace); end proc; |
> | vysledek_vyvoje_populace(na_zacatku, pocet_kroku); |
> | stats[describe, mean]([seq(vysledek_vyvoje_populace(na_zacatku, pocet_kroku),k=1..50)])*1.0; |
> | na_zacatku*exp(p*pocet_kroku); |
> |