verhulst.mw

Verhulsts dynamiske system 

Dette Maple-dokumentet ble første gang brukt i en forelesning i dynamiske systemer, 1998-01-30. 

Dokumentasjonen er det så som så med (dokumentasjon? hva er det?), men om du var tilstede har du forhåpentlig oppfattet nok til å kunne eksperimentere litt på egen hånd. 

Definisjoner og innledende manøvrer 

> restart;
 

> Verhulst:=r->unapply((1+r)*x-r*x^2,x): 'Verhulst(r)'=Verhulst(r);
 

> fikspunkter=solve(Verhulst(r)(x)=x,x);
 

> plot([x->x,seq(Verhulst((3+i)/4),i=0..9)],0..4/3,color=black);
 

 

 

Verhulst(r) = (proc (x) options operator, arrow; `+`(`*`(`+`(1, r), `*`(x)), `-`(`*`(r, `*`(`^`(x, 2))))) end proc)
fikspunkter = (0, 1)
Plot_2d
 

>
 

Iterasjoner 

Numerisk 

Implementasjon 

funiter(f,x0,n) produserer sekvensen x0,f(x0),f(f(x0)),...,f@@n(x0). 

> funiter:=proc(f,x0,n)
 local result, x, i;
 x:=x0; result:=x;
 for i from 1 to n do
   x:=f(x);
   result:=result,x;
 od;
 result;
end:
 

> funiter(Verhulst(1.8),0.5,30);
 

.5, .950, 1.0355000, .969331550, 1.022841763, .980787446, 1.014705623, .987846242, 1.009457122, .992273316, 1.006073885, .995074486, 1.003896742, .996855274, 1.002497980, .997990384, 1.001600423, .998...
.5, .950, 1.0355000, .969331550, 1.022841763, .980787446, 1.014705623, .987846242, 1.009457122, .992273316, 1.006073885, .995074486, 1.003896742, .996855274, 1.002497980, .997990384, 1.001600423, .998...
.5, .950, 1.0355000, .969331550, 1.022841763, .980787446, 1.014705623, .987846242, 1.009457122, .992273316, 1.006073885, .995074486, 1.003896742, .996855274, 1.002497980, .997990384, 1.001600423, .998...
.5, .950, 1.0355000, .969331550, 1.022841763, .980787446, 1.014705623, .987846242, 1.009457122, .992273316, 1.006073885, .995074486, 1.003896742, .996855274, 1.002497980, .997990384, 1.001600423, .998...
.5, .950, 1.0355000, .969331550, 1.022841763, .980787446, 1.014705623, .987846242, 1.009457122, .992273316, 1.006073885, .995074486, 1.003896742, .996855274, 1.002497980, .997990384, 1.001600423, .998...
(1.2.1.1)
 

> funiter(Verhulst(1.99),0.5,30);
 

.5, .9975, 1.002462562, .997549996, 1.002413559, .997598984, 1.002365534, .997646986, 1.002318466, .997694022, 1.002272337, .997740110, 1.002227128, .997785273, 1.002182819, .997829527, 1.002139394, ....
.5, .9975, 1.002462562, .997549996, 1.002413559, .997598984, 1.002365534, .997646986, 1.002318466, .997694022, 1.002272337, .997740110, 1.002227128, .997785273, 1.002182819, .997829527, 1.002139394, ....
.5, .9975, 1.002462562, .997549996, 1.002413559, .997598984, 1.002365534, .997646986, 1.002318466, .997694022, 1.002272337, .997740110, 1.002227128, .997785273, 1.002182819, .997829527, 1.002139394, ....
.5, .9975, 1.002462562, .997549996, 1.002413559, .997598984, 1.002365534, .997646986, 1.002318466, .997694022, 1.002272337, .997740110, 1.002227128, .997785273, 1.002182819, .997829527, 1.002139394, ....
.5, .9975, 1.002462562, .997549996, 1.002413559, .997598984, 1.002365534, .997646986, 1.002318466, .997694022, 1.002272337, .997740110, 1.002227128, .997785273, 1.002182819, .997829527, 1.002139394, ....
(1.2.1.2)
 

> funiter(Verhulst(2.01),0.5,30);
 

.5, 1.0025, .997462438, 1.002549994, .997411437, 1.002600980, .997359413, 1.002652978, .997306346, 1.002706006, .997252217, 1.002760085, .997197002, 1.002815236, .997140680, 1.002871480, .997083233, 1...
.5, 1.0025, .997462438, 1.002549994, .997411437, 1.002600980, .997359413, 1.002652978, .997306346, 1.002706006, .997252217, 1.002760085, .997197002, 1.002815236, .997140680, 1.002871480, .997083233, 1...
.5, 1.0025, .997462438, 1.002549994, .997411437, 1.002600980, .997359413, 1.002652978, .997306346, 1.002706006, .997252217, 1.002760085, .997197002, 1.002815236, .997140680, 1.002871480, .997083233, 1...
.5, 1.0025, .997462438, 1.002549994, .997411437, 1.002600980, .997359413, 1.002652978, .997306346, 1.002706006, .997252217, 1.002760085, .997197002, 1.002815236, .997140680, 1.002871480, .997083233, 1...
.5, 1.0025, .997462438, 1.002549994, .997411437, 1.002600980, .997359413, 1.002652978, .997306346, 1.002706006, .997252217, 1.002760085, .997197002, 1.002815236, .997140680, 1.002871480, .997083233, 1...
(1.2.1.3)
 

> funiter(Verhulst(2.05),0.5,30);
 

.5, 1.0125, .986554688, 1.013746986, .985178255, 1.015112480, .983663703, 1.016606019, .981998372, 1.018237390, .980168907, 1.020016439, .978161390, 1.021952845, .975961562, 1.024055774, .973555144, 1...
.5, 1.0125, .986554688, 1.013746986, .985178255, 1.015112480, .983663703, 1.016606019, .981998372, 1.018237390, .980168907, 1.020016439, .978161390, 1.021952845, .975961562, 1.024055774, .973555144, 1...
.5, 1.0125, .986554688, 1.013746986, .985178255, 1.015112480, .983663703, 1.016606019, .981998372, 1.018237390, .980168907, 1.020016439, .978161390, 1.021952845, .975961562, 1.024055774, .973555144, 1...
.5, 1.0125, .986554688, 1.013746986, .985178255, 1.015112480, .983663703, 1.016606019, .981998372, 1.018237390, .980168907, 1.020016439, .978161390, 1.021952845, .975961562, 1.024055774, .973555144, 1...
.5, 1.0125, .986554688, 1.013746986, .985178255, 1.015112480, .983663703, 1.016606019, .981998372, 1.018237390, .980168907, 1.020016439, .978161390, 1.021952845, .975961562, 1.024055774, .973555144, 1...
(1.2.1.4)
 

> funiter(Verhulst(2.3),0.5,30);
 

.5, 1.075, .8895625, 1.115516935, .819136412, 1.159885899, .733352279, 1.183109721, .684840271, 1.181258641, .688797968, 1.181815220, .687609634, 1.181655672, .687950426, 1.181702092, .687851286, 1.18...
.5, 1.075, .8895625, 1.115516935, .819136412, 1.159885899, .733352279, 1.183109721, .684840271, 1.181258641, .688797968, 1.181815220, .687609634, 1.181655672, .687950426, 1.181702092, .687851286, 1.18...
.5, 1.075, .8895625, 1.115516935, .819136412, 1.159885899, .733352279, 1.183109721, .684840271, 1.181258641, .688797968, 1.181815220, .687609634, 1.181655672, .687950426, 1.181702092, .687851286, 1.18...
.5, 1.075, .8895625, 1.115516935, .819136412, 1.159885899, .733352279, 1.183109721, .684840271, 1.181258641, .688797968, 1.181815220, .687609634, 1.181655672, .687950426, 1.181702092, .687851286, 1.18...
.5, 1.075, .8895625, 1.115516935, .819136412, 1.159885899, .733352279, 1.183109721, .684840271, 1.181258641, .688797968, 1.181815220, .687609634, 1.181655672, .687950426, 1.181702092, .687851286, 1.18...
(1.2.1.5)
 

> funiter(Verhulst(2.5),0.5,30);
 

.5, 1.125, .7734375, 1.211517334, .570875041, 1.183316863, .641012025, 1.216301048, .558583070, 1.175003130, .660930065, 1.221183851, .545918483, 1.165647215, .682931677, 1.224271682, .537848009, 1.15...
.5, 1.125, .7734375, 1.211517334, .570875041, 1.183316863, .641012025, 1.216301048, .558583070, 1.175003130, .660930065, 1.221183851, .545918483, 1.165647215, .682931677, 1.224271682, .537848009, 1.15...
.5, 1.125, .7734375, 1.211517334, .570875041, 1.183316863, .641012025, 1.216301048, .558583070, 1.175003130, .660930065, 1.221183851, .545918483, 1.165647215, .682931677, 1.224271682, .537848009, 1.15...
.5, 1.125, .7734375, 1.211517334, .570875041, 1.183316863, .641012025, 1.216301048, .558583070, 1.175003130, .660930065, 1.221183851, .545918483, 1.165647215, .682931677, 1.224271682, .537848009, 1.15...
.5, 1.125, .7734375, 1.211517334, .570875041, 1.183316863, .641012025, 1.216301048, .558583070, 1.175003130, .660930065, 1.221183851, .545918483, 1.165647215, .682931677, 1.224271682, .537848009, 1.15...
(1.2.1.6)
 

> funiter(Verhulst(3.0),0.5,60);
 

.5, 1.250, .3125000, .9570312500, 1.080398560, .819811096, 1.262973685, .266587153, .8531424816, 1.229013644, .384630965, 1.094700922, .783693361, 1.292247592, .159278851, .5610061469, 1.299840897, .1...
.5, 1.250, .3125000, .9570312500, 1.080398560, .819811096, 1.262973685, .266587153, .8531424816, 1.229013644, .384630965, 1.094700922, .783693361, 1.292247592, .159278851, .5610061469, 1.299840897, .1...
.5, 1.250, .3125000, .9570312500, 1.080398560, .819811096, 1.262973685, .266587153, .8531424816, 1.229013644, .384630965, 1.094700922, .783693361, 1.292247592, .159278851, .5610061469, 1.299840897, .1...
.5, 1.250, .3125000, .9570312500, 1.080398560, .819811096, 1.262973685, .266587153, .8531424816, 1.229013644, .384630965, 1.094700922, .783693361, 1.292247592, .159278851, .5610061469, 1.299840897, .1...
.5, 1.250, .3125000, .9570312500, 1.080398560, .819811096, 1.262973685, .266587153, .8531424816, 1.229013644, .384630965, 1.094700922, .783693361, 1.292247592, .159278851, .5610061469, 1.299840897, .1...
.5, 1.250, .3125000, .9570312500, 1.080398560, .819811096, 1.262973685, .266587153, .8531424816, 1.229013644, .384630965, 1.094700922, .783693361, 1.292247592, .159278851, .5610061469, 1.299840897, .1...
.5, 1.250, .3125000, .9570312500, 1.080398560, .819811096, 1.262973685, .266587153, .8531424816, 1.229013644, .384630965, 1.094700922, .783693361, 1.292247592, .159278851, .5610061469, 1.299840897, .1...
.5, 1.250, .3125000, .9570312500, 1.080398560, .819811096, 1.262973685, .266587153, .8531424816, 1.229013644, .384630965, 1.094700922, .783693361, 1.292247592, .159278851, .5610061469, 1.299840897, .1...
.5, 1.250, .3125000, .9570312500, 1.080398560, .819811096, 1.262973685, .266587153, .8531424816, 1.229013644, .384630965, 1.094700922, .783693361, 1.292247592, .159278851, .5610061469, 1.299840897, .1...
.5, 1.250, .3125000, .9570312500, 1.080398560, .819811096, 1.262973685, .266587153, .8531424816, 1.229013644, .384630965, 1.094700922, .783693361, 1.292247592, .159278851, .5610061469, 1.299840897, .1...
.5, 1.250, .3125000, .9570312500, 1.080398560, .819811096, 1.262973685, .266587153, .8531424816, 1.229013644, .384630965, 1.094700922, .783693361, 1.292247592, .159278851, .5610061469, 1.299840897, .1...
(1.2.1.7)
 

Litt analyse 

> D(Verhulst(r)); %(1);
 

>
 

 

(1.2.2.1)
 

Fikspunktet i x=1 er stabilt for r mellom 0 og 2, men blir ustabilt for r>2. 

NB!  Flere av kommandoene nedenfor referererer til resultatet av forgjengeren (%), så de må evalueres i rekkefølge! 

> (Verhulst(r)@@2)(x);
 

`+`(`*`(`+`(1, r), `*`(`+`(`*`(`+`(1, r), `*`(x)), `-`(`*`(r, `*`(`^`(x, 2))))))), `-`(`*`(r, `*`(`^`(`+`(`*`(`+`(1, r), `*`(x)), `-`(`*`(r, `*`(`^`(x, 2))))), 2))))) (1.2.2.2)
 

> factor(%-x);
 

`+`(`-`(`*`(x, `*`(r, `*`(`+`(`-`(1), x), `*`(`+`(`*`(`^`(r, 2), `*`(`^`(x, 2))), `-`(`*`(2, `*`(x, `*`(r)))), `-`(`*`(x, `*`(`^`(r, 2)))), 2, r))))))) (1.2.2.3)
 

> %/(x*(x-1));
 

`+`(`-`(`*`(r, `*`(`+`(`*`(`^`(r, 2), `*`(`^`(x, 2))), `-`(`*`(2, `*`(x, `*`(r)))), `-`(`*`(x, `*`(`^`(r, 2)))), 2, r))))) (1.2.2.4)
 

> c2:=[solve(%=0,x)]: `2-sykel`=op(c2);
 

`2-sykel` = (`/`(`*`(`+`(1, `*`(`/`(1, 2), `*`(r)), `*`(`/`(1, 2), `*`(`^`(`+`(`-`(4), `*`(`^`(r, 2))), `/`(1, 2)))))), `*`(r)), `/`(`*`(`+`(1, `*`(`/`(1, 2), `*`(r)), `-`(`*`(`/`(1, 2), `*`(`^`(`+`(`... (1.2.2.5)
 

> Dc2:=D(Verhulst(r)@@2)(c2[1]);
 

`*`(`+`(1, r, `-`(`*`(2, `*`(r, `*`(`+`(`/`(`*`(`+`(1, r), `*`(`+`(1, `*`(`/`(1, 2), `*`(r)), `*`(`/`(1, 2), `*`(`^`(`+`(`-`(4), `*`(`^`(r, 2))), `/`(1, 2))))))), `*`(r)), `-`(`/`(`*`(`^`(`+`(1, `*`(`...
`*`(`+`(1, r, `-`(`*`(2, `*`(r, `*`(`+`(`/`(`*`(`+`(1, r), `*`(`+`(1, `*`(`/`(1, 2), `*`(r)), `*`(`/`(1, 2), `*`(`^`(`+`(`-`(4), `*`(`^`(r, 2))), `/`(1, 2))))))), `*`(r)), `-`(`/`(`*`(`^`(`+`(1, `*`(`...
(1.2.2.6)
 

> Dc2:=expand(Dc2);
 

`+`(5, `-`(`*`(`^`(r, 2)))) (1.2.2.7)
 

For at `+`(5, `-`(`*`(`^`(r, 2)))) skal ligge mellom -1 og 1 må `*`(`^`(r, 2)) ligge mellom 4 og 6, så r må ligge mellom 2 og sqrt(6). 

> sqrt(6):%=evalf(%);
 

2-sykelen er stabil for r fra 2 til 2.4494..., og ustabil deretter. 

Ved den kritiske grensen bifurkerer den til en 4-sykel. 

>
 

Grafisk 

Implementasjon 

> with(plots):
 

itpairs(x0,x1,x2,...) produserer sekvensen [[x0,x0],[x0,x1]],[[x1,x1],[x1,x2]],... 

> itpairs:=proc()
 local result, p;
 p:=[args];
 result:=[p[1],p[2]];
 while nops(p)>2 do
   p:=p[2..nops(p)];
   result:=result,[p[1],p[1]],[p[1],p[2]];
 od;
 result;
end:
 

> iterplot:=proc(f,J,x0,M,N)
 local x;
 x:=[funiter(f,x0,N)];
 display([
   plot([t->t,f],J,color=black),
   pointplot([itpairs(op(x))],color=blue,style=LINE),
   pointplot([itpairs(op(x[M..N]))],color=red,style=LINE)]);
end:
 

> iterplot(Verhulst(1.8),0..4/3,0.2,30,40);
 

Plot_2d
 

> iterplot(Verhulst(2.3),0..4/3,0.2,30,40);
 

Plot_2d
 

> iterplot(Verhulst(2.4),0..4/3,0.2,30,40);
 

Plot_2d
 

> iterplot(Verhulst(2.5),0..4/3,0.45,30,40);
 

Plot_2d
 

> iterplot(Verhulst(3.0),0..4/3,0.2,130,160);
 

Plot_2d
 

>
 

Itererte funksjonsgrafer 

> plot([x->x,Verhulst(2.4)@@2],0..4/3);
 

Plot_2d
 

> plot([x->x,seq(Verhulst((3+i)/4)@@2,i=0..9)],0..4/3,color=black);
 

Plot_2d
 

> plot([x->x,Verhulst(2.5)@@4],0..4/3);
 

Plot_2d
 

> plot([x->x,seq(Verhulst((3+i)/4)@@4,i=0..9)],0..4/3,color=black);
 

Plot_2d
 

>