Porovnani spojiteho a diskretniho rustu populace 

---------------------------------------- 

Rust populace n s casem t 

 

> with(plots):
 

 

> p :=0.1;
na_zacatku := 10;
pocet_kroku := 25;
 

 

 

.1
10
25
 

 

> sys := {diff(n(t),t)=p*n(t)};
 

{diff(n(t), t) = `+`(`*`(.1, `*`(n(t))))}
 

 

> pocatecni := {n(0)= na_zacatku};
 

{n(0) = 10}
 

 

> reseni := combine(dsolve(sys union pocatecni,{n(t)}));
 

n(t) = `+`(`*`(10, `*`(exp(`+`(`*`(`/`(1, 10), `*`(t)))))))
 

 

> q:= combine(dsolve(sys union pocatecni,{n(t)}, type=numeric, range=0..pocet_kroku)):
 

 

> odeplot(q, [[t,n(t),color=orange, thickness=4]]);
 

Plot_2d
 

> spojity_graf := %;
 

PLOT(CURVES(Array(1..50, 1..2, {(1, 1) = .0, (1, 2) = 10.0, (2, 1) = .510204081632653, (2, 2) = 10.52344369463725, (3, 1) = 1.02040816326531, (3, 2) = 11.074287250345838, (4, 1) = 1.53061224489796, (4...
 

-------------------------------------------- 

Diskretni model neomezeneho rustu 

 

> rodne_cislo := 0;
cas := 0;
populace := [];
pravdepodobnost_narozeni := exp(0.1)-1;
 

 

 

 

0
0
[]
.105170918
 

 

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;
 

proc () local dite; global populace, rodne_cislo, cas; `assign`(rodne_cislo, `+`(rodne_cislo, 1)); `assign`(dite, [rodne_cislo, cas, 0]); `assign`(populace, [op(populace), dite]) end proc
proc () local dite; global populace, rodne_cislo, cas; `assign`(rodne_cislo, `+`(rodne_cislo, 1)); `assign`(dite, [rodne_cislo, cas, 0]); `assign`(populace, [op(populace), dite]) end proc
proc () local dite; global populace, rodne_cislo, cas; `assign`(rodne_cislo, `+`(rodne_cislo, 1)); `assign`(dite, [rodne_cislo, cas, 0]); `assign`(populace, [op(populace), dite]) end proc
proc () local dite; global populace, rodne_cislo, cas; `assign`(rodne_cislo, `+`(rodne_cislo, 1)); `assign`(dite, [rodne_cislo, cas, 0]); `assign`(populace, [op(populace), dite]) end proc
proc () local dite; global populace, rodne_cislo, cas; `assign`(rodne_cislo, `+`(rodne_cislo, 1)); `assign`(dite, [rodne_cislo, cas, 0]); `assign`(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;
 

proc (rodic) local dite; global populace, rodne_cislo, cas; `assign`(rodne_cislo, `+`(rodne_cislo, 1)); `assign`(dite, [rodne_cislo, cas, rodic]); `assign`(populace, [op(populace), dite]) end proc
proc (rodic) local dite; global populace, rodne_cislo, cas; `assign`(rodne_cislo, `+`(rodne_cislo, 1)); `assign`(dite, [rodne_cislo, cas, rodic]); `assign`(populace, [op(populace), dite]) end proc
proc (rodic) local dite; global populace, rodne_cislo, cas; `assign`(rodne_cislo, `+`(rodne_cislo, 1)); `assign`(dite, [rodne_cislo, cas, rodic]); `assign`(populace, [op(populace), dite]) end proc
proc (rodic) local dite; global populace, rodne_cislo, cas; `assign`(rodne_cislo, `+`(rodne_cislo, 1)); `assign`(dite, [rodne_cislo, cas, rodic]); `assign`(populace, [op(populace), dite]) end proc
proc (rodic) local dite; global populace, rodne_cislo, cas; `assign`(rodne_cislo, `+`(rodne_cislo, 1)); `assign`(dite, [rodne_cislo, cas, rodic]); `assign`(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;
 

proc () local n, i; global populace, pravdepodobnost_narozeni, cas; `assign`(cas, `+`(cas, 1)); `assign`(n, nops(populace)); for i to n do if `<`((rand(1 .. 1000))(), `+`(`*`(1000, `*`(pravdepodobnost...
proc () local n, i; global populace, pravdepodobnost_narozeni, cas; `assign`(cas, `+`(cas, 1)); `assign`(n, nops(populace)); for i to n do if `<`((rand(1 .. 1000))(), `+`(`*`(1000, `*`(pravdepodobnost...
proc () local n, i; global populace, pravdepodobnost_narozeni, cas; `assign`(cas, `+`(cas, 1)); `assign`(n, nops(populace)); for i to n do if `<`((rand(1 .. 1000))(), `+`(`*`(1000, `*`(pravdepodobnost...
proc () local n, i; global populace, pravdepodobnost_narozeni, cas; `assign`(cas, `+`(cas, 1)); `assign`(n, nops(populace)); for i to n do if `<`((rand(1 .. 1000))(), `+`(`*`(1000, `*`(pravdepodobnost...
proc () local n, i; global populace, pravdepodobnost_narozeni, cas; `assign`(cas, `+`(cas, 1)); `assign`(n, nops(populace)); for i to n do if `<`((rand(1 .. 1000))(), `+`(`*`(1000, `*`(pravdepodobnost...
proc () local n, i; global populace, pravdepodobnost_narozeni, cas; `assign`(cas, `+`(cas, 1)); `assign`(n, nops(populace)); for i to n do if `<`((rand(1 .. 1000))(), `+`(`*`(1000, `*`(pravdepodobnost...
proc () local n, i; global populace, pravdepodobnost_narozeni, cas; `assign`(cas, `+`(cas, 1)); `assign`(n, nops(populace)); for i to n do if `<`((rand(1 .. 1000))(), `+`(`*`(1000, `*`(pravdepodobnost...
proc () local n, i; global populace, pravdepodobnost_narozeni, cas; `assign`(cas, `+`(cas, 1)); `assign`(n, nops(populace)); for i to n do if `<`((rand(1 .. 1000))(), `+`(`*`(1000, `*`(pravdepodobnost...
proc () local n, i; global populace, pravdepodobnost_narozeni, cas; `assign`(cas, `+`(cas, 1)); `assign`(n, nops(populace)); for i to n do if `<`((rand(1 .. 1000))(), `+`(`*`(1000, `*`(pravdepodobnost...
proc () local n, i; global populace, pravdepodobnost_narozeni, cas; `assign`(cas, `+`(cas, 1)); `assign`(n, nops(populace)); for i to n do if `<`((rand(1 .. 1000))(), `+`(`*`(1000, `*`(pravdepodobnost...
 

 

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

Plot_2d
 

> populace;
 

[[1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0], [6, 0, 0], [7, 0, 0], [8, 0, 0], [9, 0, 0], [10, 0, 0], [11, 1, 3], [12, 2, 6], [13, 3, 7], [14, 3, 9], [15, 3, 11], [16, 4, 4], [17, 5, 10], [1...
[[1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0], [6, 0, 0], [7, 0, 0], [8, 0, 0], [9, 0, 0], [10, 0, 0], [11, 1, 3], [12, 2, 6], [13, 3, 7], [14, 3, 9], [15, 3, 11], [16, 4, 4], [17, 5, 10], [1...
[[1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0], [6, 0, 0], [7, 0, 0], [8, 0, 0], [9, 0, 0], [10, 0, 0], [11, 1, 3], [12, 2, 6], [13, 3, 7], [14, 3, 9], [15, 3, 11], [16, 4, 4], [17, 5, 10], [1...
[[1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0], [6, 0, 0], [7, 0, 0], [8, 0, 0], [9, 0, 0], [10, 0, 0], [11, 1, 3], [12, 2, 6], [13, 3, 7], [14, 3, 9], [15, 3, 11], [16, 4, 4], [17, 5, 10], [1...
[[1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0], [6, 0, 0], [7, 0, 0], [8, 0, 0], [9, 0, 0], [10, 0, 0], [11, 1, 3], [12, 2, 6], [13, 3, 7], [14, 3, 9], [15, 3, 11], [16, 4, 4], [17, 5, 10], [1...
[[1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0], [6, 0, 0], [7, 0, 0], [8, 0, 0], [9, 0, 0], [10, 0, 0], [11, 1, 3], [12, 2, 6], [13, 3, 7], [14, 3, 9], [15, 3, 11], [16, 4, 4], [17, 5, 10], [1...
[[1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0], [6, 0, 0], [7, 0, 0], [8, 0, 0], [9, 0, 0], [10, 0, 0], [11, 1, 3], [12, 2, 6], [13, 3, 7], [14, 3, 9], [15, 3, 11], [16, 4, 4], [17, 5, 10], [1...
[[1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0], [6, 0, 0], [7, 0, 0], [8, 0, 0], [9, 0, 0], [10, 0, 0], [11, 1, 3], [12, 2, 6], [13, 3, 7], [14, 3, 9], [15, 3, 11], [16, 4, 4], [17, 5, 10], [1...
[[1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0], [6, 0, 0], [7, 0, 0], [8, 0, 0], [9, 0, 0], [10, 0, 0], [11, 1, 3], [12, 2, 6], [13, 3, 7], [14, 3, 9], [15, 3, 11], [16, 4, 4], [17, 5, 10], [1...
[[1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0], [6, 0, 0], [7, 0, 0], [8, 0, 0], [9, 0, 0], [10, 0, 0], [11, 1, 3], [12, 2, 6], [13, 3, 7], [14, 3, 9], [15, 3, 11], [16, 4, 4], [17, 5, 10], [1...
[[1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0], [6, 0, 0], [7, 0, 0], [8, 0, 0], [9, 0, 0], [10, 0, 0], [11, 1, 3], [12, 2, 6], [13, 3, 7], [14, 3, 9], [15, 3, 11], [16, 4, 4], [17, 5, 10], [1...
[[1, 0, 0], [2, 0, 0], [3, 0, 0], [4, 0, 0], [5, 0, 0], [6, 0, 0], [7, 0, 0], [8, 0, 0], [9, 0, 0], [10, 0, 0], [11, 1, 3], [12, 2, 6], [13, 3, 7], [14, 3, 9], [15, 3, 11], [16, 4, 4], [17, 5, 10], [1...
 

> display(spojity_graf, seq(vyvoj_populace(na_zacatku, pocet_kroku),k=1..50));
 

Plot_2d
 

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

proc (na_zacatku, pocet_kroku) local i, j; global pravdepodobnost_narozeni, populace, rodne_cislo, cas; `assign`(rodne_cislo, 0); `assign`(cas, 0); `assign`(populace, []); for i to na_zacatku do stvor...
proc (na_zacatku, pocet_kroku) local i, j; global pravdepodobnost_narozeni, populace, rodne_cislo, cas; `assign`(rodne_cislo, 0); `assign`(cas, 0); `assign`(populace, []); for i to na_zacatku do stvor...
proc (na_zacatku, pocet_kroku) local i, j; global pravdepodobnost_narozeni, populace, rodne_cislo, cas; `assign`(rodne_cislo, 0); `assign`(cas, 0); `assign`(populace, []); for i to na_zacatku do stvor...
proc (na_zacatku, pocet_kroku) local i, j; global pravdepodobnost_narozeni, populace, rodne_cislo, cas; `assign`(rodne_cislo, 0); `assign`(cas, 0); `assign`(populace, []); for i to na_zacatku do stvor...
proc (na_zacatku, pocet_kroku) local i, j; global pravdepodobnost_narozeni, populace, rodne_cislo, cas; `assign`(rodne_cislo, 0); `assign`(cas, 0); `assign`(populace, []); for i to na_zacatku do stvor...
proc (na_zacatku, pocet_kroku) local i, j; global pravdepodobnost_narozeni, populace, rodne_cislo, cas; `assign`(rodne_cislo, 0); `assign`(cas, 0); `assign`(populace, []); for i to na_zacatku do stvor...
proc (na_zacatku, pocet_kroku) local i, j; global pravdepodobnost_narozeni, populace, rodne_cislo, cas; `assign`(rodne_cislo, 0); `assign`(cas, 0); `assign`(populace, []); for i to na_zacatku do stvor...
proc (na_zacatku, pocet_kroku) local i, j; global pravdepodobnost_narozeni, populace, rodne_cislo, cas; `assign`(rodne_cislo, 0); `assign`(cas, 0); `assign`(populace, []); for i to na_zacatku do stvor...
proc (na_zacatku, pocet_kroku) local i, j; global pravdepodobnost_narozeni, populace, rodne_cislo, cas; `assign`(rodne_cislo, 0); `assign`(cas, 0); `assign`(populace, []); for i to na_zacatku do stvor...
proc (na_zacatku, pocet_kroku) local i, j; global pravdepodobnost_narozeni, populace, rodne_cislo, cas; `assign`(rodne_cislo, 0); `assign`(cas, 0); `assign`(populace, []); for i to na_zacatku do stvor...
 

> vysledek_vyvoje_populace(na_zacatku, pocet_kroku);
 

91
 

> stats[describe, mean]([seq(vysledek_vyvoje_populace(na_zacatku, pocet_kroku),k=1..50)])*1.0;
 

125.7000000
 

> na_zacatku*exp(p*pocet_kroku);
 

121.8249396
 

>