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); |
![]() |
|
![]() |
|
![]() |
> |
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); |
![]() ![]() ![]() ![]() ![]() |
(1.2.1.1) |
> | funiter(Verhulst(1.99),0.5,30); |
![]() ![]() ![]() ![]() ![]() |
(1.2.1.2) |
> | funiter(Verhulst(2.01),0.5,30); |
![]() ![]() ![]() ![]() ![]() |
(1.2.1.3) |
> | funiter(Verhulst(2.05),0.5,30); |
![]() ![]() ![]() ![]() ![]() |
(1.2.1.4) |
> | funiter(Verhulst(2.3),0.5,30); |
![]() ![]() ![]() ![]() ![]() |
(1.2.1.5) |
> | funiter(Verhulst(2.5),0.5,30); |
![]() ![]() ![]() ![]() ![]() |
(1.2.1.6) |
> | funiter(Verhulst(3.0),0.5,60); |
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
(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.2.2.2) |
> | factor(%-x); |
![]() |
(1.2.2.3) |
> | %/(x*(x-1)); |
![]() |
(1.2.2.4) |
> | c2:=[solve(%=0,x)]: `2-sykel`=op(c2); |
![]() |
(1.2.2.5) |
> | Dc2:=D(Verhulst(r)@@2)(c2[1]); |
![]() ![]() |
(1.2.2.6) |
> | Dc2:=expand(Dc2); |
![]() |
(1.2.2.7) |
For at skal ligge mellom
og 1 må
ligge mellom 4 og 6, så
må ligge mellom 2 og
.
> | 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); |
![]() |
> | iterplot(Verhulst(2.3),0..4/3,0.2,30,40); |
![]() |
> | iterplot(Verhulst(2.4),0..4/3,0.2,30,40); |
![]() |
> | iterplot(Verhulst(2.5),0..4/3,0.45,30,40); |
![]() |
> | iterplot(Verhulst(3.0),0..4/3,0.2,130,160); |
![]() |
> |
Itererte funksjonsgrafer
> | plot([x->x,Verhulst(2.4)@@2],0..4/3); |
![]() |
> | plot([x->x,seq(Verhulst((3+i)/4)@@2,i=0..9)],0..4/3,color=black); |
![]() |
> | plot([x->x,Verhulst(2.5)@@4],0..4/3); |
![]() |
> | plot([x->x,seq(Verhulst((3+i)/4)@@4,i=0..9)],0..4/3,color=black); |
![]() |
> |