15.11.2012 Aufrufe

Die logistische Gleichung

Die logistische Gleichung

Die logistische Gleichung

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

Erstellt mit Maple 7 unter Linux; Stand: Jan. 2003<br />

<strong>Die</strong> <strong>logistische</strong> <strong>Gleichung</strong><br />

EMEW, FH N<br />

<strong>Die</strong> diskrete <strong>logistische</strong> <strong>Gleichung</strong> lautet<br />

x n+ 1 = α xn ( 1 − xn ) .<br />

Dabei ist xn die relative Populationsgröße einer Spezies (ein Wert zwischen 0 und 1)<br />

zum Zeitpunkt tn . (Im allgemeinen ist der Abstand zwischen zwei aufeinanderfolgenden<br />

Zeitpunkten konstant.) Der Faktor α ist die Fertilitätsrate der Spezies. <strong>Die</strong> Vermehrungsrate<br />

der Spezies ist einerseits proportional zur Populationsgröße (im Grenzfall unbegrenzter<br />

Ressourcen mit dem Proportionalitätsfaktor α), andererseits steht der Faktor 1 − xn für die Begrenztheit der Ressourcen, die bei einer Populationsgröße 1 völlig ausgeschöpft sind.<br />

Es handelt sich bei diesem Modell um ein einfachstes<br />

diskretes nichtlineares System.<br />

> restart;<br />

<strong>Die</strong>se Routine ermittelt die Häufungspunkte zum Parameterwert a, indem erst, mit Startwert x0,<br />

n Iterationsschritte durchlaufen werden und dann eine Liste vom letzten und den k folgenden Punkten<br />

erstellt und als Ergebnis ausgegeben wird.<br />

<strong>Die</strong> erste Koordinate a wird im Hinblick auf das zu erzeugende Feigenbaum-Diagramm hinzugefügt.<br />

> logistic:=proc(a,x0,n,k)<br />

local x,j,b;<br />

x:=x0;<br />

for j from 1 to n do<br />

x:=evalhf(a*x*(1-x));<br />

end do;<br />

b:=[[a,x]];<br />

for j from 1 to k do<br />

x:=evalhf(a*x*(1-x));<br />

b:=[op(b),[a,x]];<br />

end do;<br />

b;<br />

end proc;<br />

> logistic(4,.3,10000,10);<br />

> with(plots):<br />

Nun werden in 401 Schritten die Parameterwerte von 0 bis 4 durchlaufen, um mit 128 nach 10000 Folgengliedern<br />

das Feigenbaum-Diagramm zu erzeugen. (Auf meinem vom Frühjahr 2000 stammenden PC dauert das keine Minute!)<br />

> for i from 0 to 400 do<br />

p||i:=pointplot(logistic(i/100,.3,10000,128),<br />

symbol=POINT,color=BLACK)<br />

end do:<br />

> display({seq(p||i,i=0..400)});<br />

#Bild 01<br />

Man sieht: Für Parameterwerte zwischen 0 und 1 stirbt die Populaton aus, für Werte zwischen 1 und 3<br />

konvergiert sie gegen eine Grenzpopulationsgröße, und dann beginnt eine Kaskade der Periodenverdoppelung;<br />

zwischen 3 und 3.45 pendelt die Population zwischen zwei Werten hin und her - von Generation zu Generation -, dann gibt ein<br />

Hin und Her zwischen vier Werten, dann acht, dann 16, usw. Bei der Fertilitätsrate von ca. 3.57 ist ein chaotischer Zustand<br />

erreicht. Schon dieses grobe Bild zeigt, dass es später noch einmal Fenster mit wenigen Häufungswerten gibt.<br />

Den Bereich von 3.5 bis 4 schauen wir noch genauer an: Ein erstaunliches Bild!<br />

> for i from 3500 to 4000 do<br />

pp||i:=pointplot(logistic(i/1000,.3,10000,128),symbol=POINT,<br />

color=BLACK) end do:<br />

> display({seq(pp||i,i=3500..4000)});<br />

#Bild 02<br />

Periode 3 impliziert Chaos!<br />

So lautete der Titel eines Artikels im American Mathematical Monthly.<br />

Gemeint ist: Tritt die Periode 3 auf, dann auch alle anderen.<br />

Eine ziemlich erstaunliche weit allgemeinere Aussage trifft der berühmte Satz von Sarkovskii; siehe z.B.<br />

Robert L. Devaney: An Introduction to Chaotic Dynamical Systems.<br />

Beim Parameterwert 3.83 ist die Periode 3, wie man dem großen "Fenster" mit Periode 3 in Bild 2 entnehmen kann:<br />

> logistic(3.83,.3,10000,8); # Periodenlaenge 3<br />

Auch ein Fenster mit Periode 5, nicht so groß, ist deutlich zu erkennen, 3.739 ist ein zugehöriger Parameterwert:<br />

> logistic(3.739,.7,10000,14); # Periodenlaenge 5<br />

Page 1


Es ist instruktiv, sich auch die iterierte <strong>logistische</strong> Funktion anzusehen.<br />

> logist:=(a,x)->evalf(a*x*(1-x),100);<br />

> logit:=(a,n)->unapply(((x->logist(a,x))@@n)(x),x);<br />

> logit(1,4);<br />

> plot({logit(3.83,1)(x),logit(3.83,3)(x),x},x=0..1,<br />

numpoints=1000,scaling=CONSTRAINED,<br />

title="alpha=3.83, Periode 3",titlefont=[HELVETICA, BOLD, 16]);<br />

#Bild 03<br />

Nun machen wir die Periode 3 unmittelbar sichtbar:<br />

> logi:=x->evalhf(3.83*x*(1-x));<br />

> zykel:=plot([[.156149315683605322,.156149315683605322],<br />

[.156149315683605322,logi(.156149315683605322)],<br />

[logi(.156149315683605322),logi(.156149315683605322)],<br />

[logi(.156149315683605322),logi(logi(.156149315683605322))],<br />

[logi(logi(.156149315683605322)),logi(logi(.156149315683605322))],<br />

[logi(logi(.156149315683605322)),logi(logi(logi(.156149315683605322)))],<br />

[.156149315683605322,.156149315683605322]],x=0..1,y=0..1,<br />

linestyle=3,thickness=2,color=BLUE):<br />

> plogi:=plot(logi,0..1):px:=plot(x,x=0..1,color=BLACK):<br />

> display({plogi,zykel,px},axes=BOXED,scaling=CONSTRAINED,<br />

title="alpha=3.83, Periode 3",titlefont=[HELVETICA, BOLD, 16]);<br />

#Bild 04<br />

Das ist noch instruktiver:<br />

> pl:=plot(logit(3.83,3)(x),x=0..1,numpoints=1000,scaling=CONSTRAINED):<br />

display({pl,zykel,px},axes=BOXED,scaling=CONSTRAINED,<br />

title="alpha=3.83, Periode 3",titlefont=[HELVETICA, BOLD, 16]);<br />

#Bild 05<br />

Nun eine kleine Prozedur, die den Fortgang der Iteration sichtbar macht:<br />

> langzykel:=proc(a,x0,n)<br />

local pkte,k ;<br />

pkte:=[[x0,x0]];<br />

for k from 1 to n do<br />

pkte:=[op(pkte),[pkte[-1][1],logist(a,pkte[-1][1])],<br />

[logist(a,pkte[-1][1]),logist(a,pkte[-1][1])]];<br />

end do;<br />

pkte;<br />

end proc;<br />

> liste:=langzykel(3.83,.3,20):<br />

anf:=plot([[.3,0],[.3,.3]],x=0..1,style=line,linestyle=2,color=BLACK):<br />

pliste:=plot(liste,x=0..1,linestyle=3):<br />

> display({zykel,px,anf,pliste},scaling=CONSTRAINED,<br />

title="alpha=3.83, Periode 3",<br />

titlefont=[HELVETICA, BOLD, 16]);<br />

#Bild 06<br />

> liste:=langzykel(3.83,.3,100):<br />

pliste:=plot(liste,x=0..1,linestyle=3):<br />

display({px,anf,pliste},scaling=CONSTRAINED,<br />

title="alpha=3.83, Periode 3",<br />

titlefont=[HELVETICA, BOLD, 16]);<br />

#Bild 07<br />

Nach hundert Iterationen ist der Zykel fast erreicht.<br />

Nun ein paar andere Fälle.<br />

> liste07:=langzykel(.7,.5,5):<br />

pliste07:=plot(liste07,x=0..1,linestyle=3,color=BLUE):<br />

anf07:=plot([[.5,0],[.5,.5]],x=0..1,style=line,linestyle=2,color=BLACK):<br />

plogi07:=plot(logist(.7,x),x=0..1):<br />

> display({plogi07,px,anf07,pliste07},scaling=CONSTRAINED,<br />

title="alpha=0.7, Aussterben",<br />

titlefont=[HELVETICA, BOLD, 16]);<br />

#Bild 08<br />

> liste25:=langzykel(2.5,.7,5):<br />

pliste25:=plot(liste25,x=0..1,linestyle=3,color=BLUE):<br />

anf25:=plot([[.7,0],[.7,.7]],x=0..1,style=line,linestyle=2,color=BLACK):<br />

plogi25:=plot(logist(2.5,x),x=0..1):<br />

> display({plogi25,px,anf25,pliste25},scaling=CONSTRAINED,<br />

title="alpha=2.5, Konvergenz",<br />

titlefont=[HELVETICA, BOLD, 16]);<br />

#Bild 09<br />

> liste32:=langzykel(3.2,.3,31):pliste32:=plot(liste32,x=0..1,<br />

style=line,linestyle=3,color=BLUE):<br />

anf32:=plot([[.3,0],[.3,.3]],x=0..1,style=line,linestyle=2,color=BLACK):<br />

plogi32:=plot(logist(3.2,x),x=0..1):<br />

display({plogi32,px,anf32,pliste32},scaling=CONSTRAINED,<br />

Page 2


display({plogi32,px,anf32,pliste32},scaling=CONSTRAINED,<br />

title="alpha=3.2, Periode 2",<br />

titlefont=[HELVETICA, BOLD, 16]);<br />

#Bild 10<br />

> pit32:=plot({logit(3.2,1)(x),logit(3.2,2)(x),x},x=0..1,color=BLACK,<br />

numpoints=1000,scaling=CONSTRAINED,<br />

title="alpha=3.2, Periode 2",titlefont=[HELVETICA, BOLD, 16]):<br />

pit25:=plot({logit(2.5,1)(x),logit(2.5,2)(x),x},x=0..1,color=BLACK,<br />

numpoints=1000,scaling=CONSTRAINED,<br />

title="alpha=2.5, Konvergenz",titlefont=[HELVETICA, BOLD, 16]):<br />

display(array([pit25,pit32]));<br />

#Bild 11<br />

> plot({logit(3.5,1)(x),logit(3.5,4)(x),x},x=0..1,color=BLACK,<br />

numpoints=1000,scaling=CONSTRAINED,<br />

title="alpha=3.5, Periode 4",<br />

titlefont=[HELVETICA, BOLD, 16]);<br />

#Bild 12<br />

> liste35:=langzykel(3.5,.3,51):pliste35:=plot(liste35,x=0..1,<br />

style=line,linestyle=3,color=BLUE):<br />

anf35:=plot([[.3,0],[.3,.3]],x=0..1,style=line,linestyle=2,color=BLACK):<br />

plogi35:=plot(logist(3.5,x),x=0..1):<br />

display({plogi35,px,anf35,pliste35},scaling=CONSTRAINED,<br />

title="alpha=3.5, Periode 4",<br />

titlefont=[TIMES, BOLD, 16]);<br />

#Bild 13<br />

Wird fortgesetzt!<br />

Page 3

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!