Nichtlineare diskrete Abbildungen

H.J. Lüdde

nach

R. Mahnke Kapitel 8

Diskrete Abbildungen nennt man Iterationen der Form

[Maple Math]

Motivation:

(i) Wir haben bei Poincare Schnitten gesehen, dass die 'Stroboskopaufnahmen' einer chaotischen Phasenraumtrajektorie regelmäßige Strukturen aufweist (seltsame Attraktoren): Ein Poincare Schnitt diskretisiert die Trajektorie. (ii) Geht man davon aus, dass eine Zeitreihe x(t) deterministischer Natur ist, so sollte bezogen auf ein festes Intervall dt ein diskreter Zusammenhang bestehen zwischen x(n+1)=x(t+(n+1)dt) und x(n). (iii) Für komplexe Systeme sind Zeitreihen oft nur diskret verfügbar: z.B. die Populationen zu aufeinanderfolgenden Generationen (logistische Abbildung).

Es gibt verschiedene in der Literatur diskutierte diskrete Abbildungen: (i) Logistische Abbildung, (ii) Standardabbildung, (iii) Henon Abbildung.

Die logistische Abbildung

[Maple Math]

wurde erstmals von Verhulst zur Beschreibung einer einfachen Populationskinetik mit nichtlinearer Dämpfung vorgeschlagen.

Für s=0 entnimmt man der Iteration [Maple Math] folgende Eigenschaften:

r<1: die Population stirbt,

r=1: die Population bleibt stabil,

r>1: die Population wächst exponentiell.

Die logistische Abbildung kann mit Hilfe der Skalentransformation x(n)=s/r y(n) auf Normalform gebracht werden

[Maple Math]

Wir wollen diese Abbildung im Einzelnen diskutieren:

> restart;

> with(plots):

1) Die logistische Abbildung für verschiedene Kontrollparameter r

In diesem Abschnitt betrachten wir numerische Lösungen der logistischen Abbildung für verschiedene Werte des Kontrollparameters r.

> r:=array(1..8):x0:=array(1..8):x:=array(1..401):

> r[1]:=0.5:r[2]:=0.95:r[3]:=1:r[4]:=1.2:r[5]:=2:r[6]:=3.2:r[7]:=3.5:r[8]:=4:

> x0[1]:=0.5:x0[2]:=0.5:x0[3]:=0.5:x0[4]:=0.001:x0[5]:=0.001:x0[6]:=0.001:x0[7]:=0.001:x0[8]:=0.001:

> nmax:=400:imax:=8:

> for i from 1 to imax do

> ri:=r[i]:x[1]:=x0[i]:

> rf:=rand()/10^12:gf:=rand()/10^12:bf:=rand()/10^12:

> for n from 1 to nmax do

> x[n+1]:=ri*x[n]*(1-x[n]):

> od:

> ff.i:=plot(ri*y*(1-y),y=0..1,color=COLOR(RGB, rf, gf, bf)):

> xf.i:=plot([seq([n-1,x[n]+i-1],n=1..nmax)],color=COLOR(RGB, rf, gf, bf)):

> od:

> display(seq(ff.i,i=1..imax),view=[0..1,0..1],axes=boxed,title=` Logistische Abbildung für verschiedene Kontrollparameter r `);

[Maple Plot]

> display(seq(xf.i,i=1..imax),view=[0..100,0..8.5],axes=boxed,title=` Lösungen der logistische Abbildung für verschiedene Kontrollparameter r `);

[Maple Plot]

(Beachte, dass die Nulllinie um jeweils 1 nach größeren Werten verschoben wird). Man sieht die unterschiedlichen Lösungstopologien: Für r<1 konvergiert die Lösung gegen 0 (r=1 unendlich langsame Konvergenz), für 1<r<3.2 konvergiert die Lösung ohne Oszillationen gegen einen r-abhängigen Wert, bei r=3.2 beobachtet man eine Periode 1 Oszillation, bei r=3.5 eine Periode 2 Oszillation und bei r=4 schließlich eine chaotische Lösung.

>

2) Feigenbaum Diagramme der logistischen Abbildung

Ein Feigenbaum Diagramm stellt die asymptotische Lösung einer diskreten Abbildung als Funktion des Kontrollparameters dar. Man kann anhand dieser Abbildung die verschiedenen Topologien möglicher Lösungen untersuchen.

Iteration der logistischen Gleichung

> LogisticMap := proc(r)

> local n,x;

> x:=array(1..501):x[1]:=0.001:

> # Transienter Bereich

> for n from 1 to 299 do

> x[n+1]:=r*x[n]*(1-x[n]):

> od:

> # Beiträge zum Feigenbaum Diagramm

> for n from 300 to 500 do

> x[n+1]:=r*x[n]*(1-x[n]):

> od:

> seq([r,x[n]],n=300..500);

> end:

Prozedur für Feigenbaum Diagramm

> Feigenbaum := proc(rmin,rmax,imax)

> local dr,ri,xf,i,j;

> dr:=(rmax-rmin)/imax:ri:=rmin:

> for i from 1 to imax while ri<=4 do

> xf.i:=plot([LogisticMap(ri)],color=blue):

> ri:=rmin+i*dr:

> od:

> display(seq(xf.j,j=1..i-1),symbol=POINT,style=point, view=[rmin..rmax,0..1],axes=boxed,title=` Feigenbaum Diagramm der logistischen Abbildung `):

> end:

> Feigenbaum(1,4,200); # ACHTUNG: lange Rechenzeit

[Maple Plot]

Man sieht deutlich das Einsetzen von Periodenverdopplungen bei r = 3, 3.45, 3.54. Um detailliertere Informationen zu erhalten, muss man das Bild vergrößern

> Feigenbaum(3.52,3.62,200); # ACHTUNG: lange Rechenzeit

[Maple Plot]

und erhält die neuen Bifurkationswerte r = 3.56, 3.569....

Untersuchen Sie das Feigenbaum Diagramm und machen Sie sich die Strukturen klar.

>

3) Analytische Untersuchung der Fixpunkte

Ein Fixpunkt einer diskreten Abbildung ist definiert durch x=f(x), d.h. die Iteration bildet einen Fixpunkt in sich selbst ab.

> restart:

> with(linalg):

Warning, new definition for norm

Warning, new definition for trace

> f:=unapply(r*x*(1-x),x,r); # rhs der logistischen Abbildung

[Maple Math]

> Fixpunkte:=solve(x=f(x,r),x); # Bedingung für Fixpunkte

[Maple Math]

Zur Bestimmung der Stabilität eines Fixpunktes, untersucht man eine Lösung aus der Umgebung dieser Punktlösung. Sei also x ein Fixpunkt und y(n)=x+dx(n) eine Lösung der Iteration mit einem Anfangswert aus der Umgebung von x, so gilt:

y(n+1) = f(y(n)) = f(x+dx(n)) = f(x) + f '(x) dx(n) + .....

y(n+1) = x + f '(x) dx(n) + ...

dx(n+1) = f '(x) dx(n) + ...

und bis zur ersten Ordnung:

dx(n) = [Maple Math] dx(0) = exp( [Maple Math] n) dx(0)

[Maple Math] = ln(f '(x)).

Ist [Maple Math] <0, konvergiert jede Lösung aus der Umgebung gegen den Fixpunkt: Man nennt den Fixpunkt stabil. Andernfalls ist der Fixpunkt instabil. [Maple Math] heißt Lyapunovexponent.

> fs:=unapply(diff(f(x,r),x),x,r);

[Maple Math]

Lyapunovexponent:

> lambda:=unapply(ln(abs(fs(x,r))),x,r);

[Maple Math]

Für den ersten Fixpunkt erhält man (beachte r>0):

> rc1:=solve(lambda(Fixpunkte[1],r)=0,r);

[Maple Math]

Stabilität für r<1 und Instabilität für r>1.

Für den zweiten Fixpunkt erhält man nur Lösungen für r>1 und

> rc2:=solve(lambda(Fixpunkte[2],r)=0,r);

[Maple Math]

also im Bereich 1<r<3.

Für größere Werte von r beobachtet man ein neues Phänomen: Oszillationen. Dabei wiederholt sich für Periode k der Wert der Iteration in jedem [Maple Math] -ten Iterationsschritt. Somit erhält man als Bedingung einer Periode k=1 Oszillation

> eqs2:=x=f(f(x,r),r);

[Maple Math]

> Periode1:=solve(eqs2,x);

[Maple Math]

Achtung: der dritte Ausdruck liefert nur dann eine reelle Lösung der logistischen Gleichung, wenn der Radikand positiv, d.h.

> rc3:=solve(r^2-2*r-3,r);

[Maple Math]

r>3 ist (negative Werte für r sind nicht erlaubt). Somit haben wir für r=3 die erste Bifurkation identifiziert, die Aufgabelung von einer Periode 0 Lösung (keine Oszillation, ein asymptotisch stabiler Wert der Iteration) in eine Periode 1 Lösung (Oszillation mit zwei Werten).

Den nächsten kritischen Wert des Kontrollparameters r erhalten wir beim Übergang von Periode 1 nach Periode 2 Lösungen:

> eqs4:=0=x-f(f(f(f(x,r),r),r),r);

[Maple Math]
[Maple Math]

> sol:=solve(eqs4,x);

[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]
[Maple Math]

Die entscheidende Lösung erhält man aus einem Polynom 12. Ordnung. Sie lässt sich nicht mehr einfach analytisch bestimmen. Betrachtet man das Feigenbaumdiagramm, so kann man für den nächsten Bifurkationspunkt ablesen

> rc4:=1+sqrt(6);

[Maple Math]

a) Vegleichen Sie die obigen Aussagen mit den numerischen Ergebnissen.

b) Verifizieren Sie die folgende Aussage: Trägt man die Kontrollparameter der Bifurkationspunkte gegen die Ordnung auf, so erhält man eine geometrische Reihe der Form

r(k) = [Maple Math] - [Maple Math]

Dabei ist [Maple Math] derjenige Wert für r, bei dem Chaos einsetzt, [Maple Math] und q sind unbestimmte Konstanten.

Im nächsten Schritt soll [Maple Math] bestimmt werden.

> rck:=unapply(rho-alpha*q^k,alpha,k,q,rho);

[Maple Math]

> Fk:=(rck(alpha,k+1,Q,rho)-rck(alpha,k,Q,rho))/(rck(alpha,k+2,Q,rho)-rck(alpha,k+1,Q,rho));

[Maple Math]

> simplify(Fk,{Q=q}); # Achtung Trick: der Umweg über Q=q ist notwendig, damit MAPLE sich 'bequemt', den Bruch zu kürzen

[Maple Math]

Im Grenzfall k -> [Maple Math] entspricht Fk der Feigenbaumkonstante [Maple Math] . D.h.

> q:=1/delta;

[Maple Math]

[Maple Math] bestimmt sich aus dem ersten Bifurkationswert:

> solalpha:=solve(rck(alpha,1,q,rho)=rc3[2],alpha);

[Maple Math]

und [Maple Math] kann man schließlich aus dem zweiten Bifurkationswert ermitteln:

> solrho:=solve(rck(solalpha,2,q,rho)=rc4,rho);

[Maple Math]

Als Zahlenwert erhält man mit

> delta:=4.6692016091;

[Maple Math]

> rho:=evalf(solrho);

[Maple Math]

Nun können Sie alle Bifurkationspunkte berechnen. Versuchen Sie es und überprüfen Sie Ihre Ergebnisse mit Hilfe der numerischen Lösungen des 2. Abschnittes.