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); |
| > |