Einzelnen Beitrag anzeigen
  #97  
Alt 19.05.12, 22:06
Benutzerbild von richy
richy richy ist offline
Singularität
 
Registriert seit: 01.05.2007
Ort: karlsruhe
Beitr?ge: 4.170
Standard AW: Math Verhulst 1989

Einfacher Fall : (Es wird noch weitaus spannender)
Umkehrfunktion der analytischen Loesung (r=4) fuer diskrete ganzzahlige Abtastwerte.
************************************************** *************
Beispiel :
Zehn Iterationen mit dem Startwert 0.2.
y[0] := .2
y[1] := .64
y[2] := .9216
y[3] := .28901376
y[4] := .8219392261228
y[5] := .5854205387340
y[6] := .9708133262496
y[7] := .1133392473032
y[8] := .4019738492956
y[9] := .9615634951124

Umindizierung fuert auf die Umkehrfunktion :

yi[0] := .9615634951124
yi[1] := .4019738492956
yi[2] := .1133392473032
yi[3] := .9708133262496
...
yi[9] := .2

Die Reihe soll durch die Umkehrfunktion der analytischen Loesung erzeugt werden :
yi[k]:=(1/2*(1-cos(2^(-k)*(arccos(1-2*y[0])+n*2*Pi))));
k gibt den Zeitschritt an
n gibt den Loesungszweig an. Fuer den k ten Iterationsschritt wird die Funktion n=2^k mehrdeutig sein.
Bsp:
Ist die Funktion 2 deutig so kann gelten n=0 (2,4,6..) oder n=1 (3,5,7..)
Ist die Funktion 4 deutig so kann gelten n=0 oder n=1 oder n=2 oder n=3.
Der Index n stellt eine fehlende Information dar. Der Informationsverlust steigt wie in der rein diskreten Anschauung ueber das Vorzeichen mit jeder Iteration. Sehr schnell wird die Funktion hochgradig mehrdeutig sein. (Im kontinuierlichen Fall wird der Sachverhalt noch erstaunlicher und komplexer sein)

Beispielcode fuer manuelle Suchen von n :

> for k from 0 to 4 do
> ziel:=yi[k];
> for n from 0 to 8 do
> test:=evalf(1/2*(1-cos(2^(-k)*(arccos(1-2*yi[0])+n*2*Pi))));
> printf(`%g `,test);
> od; od;

Ausdruck :
Zitat:
ziel := .9615634951124
.961563 .961563 .961563 .961563 .961563 .961563 .961563 .961563 .961563

ziel := .4019738492956
.401973 .598026 .401973 .598026 .401973 .598026 .401973 .598026 .401973

ziel := .1133392473032
.113339 .817007 .886660 .182992 .113339 .817007 .886660 .182992 .113339

ziel := .9708133262496
.029186 .286111 .668329 .951942 .970813 .713888 .331670 .048057 .029186

ziel := .5854205387340
.007350 .077540 .212045 .390389 .585420 .767447 .908757 .987837 .992649
Einfache automatisierte Suche fuer den Index n :
restart;

Digits:=13;
> M:=7;
> y[0]:=0.2;
> for i from 1 to M-1 do
> y[i]:=y[i-1]*4*(1-y[i-1]);
> od:
> for i from 0 to M-1 do
> yi[i]:=y[M-i-1];
> od;
>
> for k from 0 to M-1 do
> ziel:=yi[k];
> for n from 0 to 2^k do
> test:=evalf(1/2*(1-cos(2^(-k)*(arccos(1-2*yi[0])+n*2*Pi))));
> if ceil(1000000*ziel)=ceil(1000000*test) or
> floor(1000000*ziel)=floor(1000000*test)
> then
> printf(`n=%g test=%1.13g`,n,test);
> index[k]:=n;
> n:=2^k;
> fi;
> od; od;

Das bereits etwas verblueffende Ergebnis :

Zitat:
ziel := .9615634951124
n=0 test=.9615634951125

ziel := .4019738492956
n=0 test=.4019738492958

ziel := .1133392473032
n=0 test=.1133392473032

ziel := .9708133262496
n=4 test=.9708133262496

ziel := .5854205387340
n=4 test=.5854205387340

ziel := .8219392261228
n=20 test=.8219392261227

ziel := .28901376
n=52 test=.2890137600000

ziel := .9216
n=52 test=.9216000000000

ziel := .64
n=180 test=.6399999999998

ziel := .2
n=436 test=.2000000000000
Indizes des Beispiels :
0,0,0,4,4,20,52,52,180,436
1,2,4,8,16... fach

Der Wert 2^k waechst exponentiell. (2^9=512). Bereits fuer 20 Iterationen wird die Indexsuche recht zeitaufwaendig. Hier die Indizes fuer 18 Iterationen :
0 0 0 0 0 0 0 64 64 64 576 1600 3648 3648 11840 11840 11840 53695

Ge?ndert von richy (22.05.12 um 15:33 Uhr)
Mit Zitat antworten