2015-06-01 18 views
7

Es gibt ein nichtlineares dynamisches System x_n = f(x_n,eta), dessen funktionale Form x[n+1] = 2*x[n] mod 1 ist. Dies ist ein chaotisches dynamisches System, das als die Sägezahnkarte oder die Bernoulli-Karte bezeichnet wird. Ich stehe vor der Schwierigkeit, die beiden durch Gleichung (4) und Gleichung (5) gegebenen Darstellungen der inversen Abbildung zu implementieren. Es folgt eine kurze Beschreibung des Problems.Matlab: Konnte keine eindeutigen Begründungen erhalten, wenn eine Formel für die Umwandlung von binären in reelle Zahlen implementiert wurde. Part1

description

wo die Sequenz (s[n+k])_k=1 to N-1 ist die symbolische Beschreibung des Zustandes x[n]. Diese Beschreibung ergibt sich aus der Unterteilung des Einheitsintervalls nachfolgend beschrieben.

Lassen Sie, die Anzahl der Partitionen M = 2 und das Symbol space = {0,1} und die Regel für die Zuordnung von Symbolen ist

s[n+1] = 1 if x[n] >= 0.5, otherwise s[n+1] = 0 

Autoren dieses Papiers:

Linear, Random Representations of Chaos 

Für Gleichung (5) Ich bekomme nicht die gleiche Zeitreihe nach Inverse, nur wenige Werte unterscheiden sich nach der Umwandlung von Binär zu Real. Kann mir bitte jemand die richtige Prozedur geben?

Ich habe versucht, die bijektive Karte für die Gleichungen (4) und (5) zu implementieren, aber es funktioniert nicht.

Code für Eq (5) - Ich bin binarisieren in 2 Möglichkeiten. x enthält die reellen Zahlen; s ist das binäre Äquivalent von 0/1 von jedem Real; y ist die Antwort nach der Umwandlung s in real. s1 ist das + 1/-1-Binäräquivalent von x; b ist die Antwort nach der Umwandlung in Real. In diesem Fall von + 1/-1, wenn ich von symbolischer Darstellung in reell umwandle, wechsle ich -1 mit 0 und wende dann die Formel in Gl (5) an. Aus den Antworten ist ersichtlich, dass y und b nach der Konvertierung nicht mit x identisch sind. Ich bekomme auch negative Reals für b, wenn die ursprünglichen Reals alle unsigned rationals sind !! Wie kann ich korrekt implementieren, so dass sie beide gleich sind?

N =10; 
x(1) = 0.1; 
for i =1 : N 
     x(i+1) = mod(x(i)*2, 1); 
end 
    y = x; 
s = (y>=0.5); %generate 0/1 logicals 


for n = 1: N   
y(n) = 0.5*s(n+1) + 0.5*y(n+1); 
end 

b=x; 

s1 = 2*(b>=0.5)-1; %Generate +1/-1 



    for k =1: N 
    if s1(k)== -1 
     s1(k) = 0; 
    end 
b(k) = 0.5*s1(k+1) + 0.5*b(k+1); 
end 

Let x =

0.100000000000000 0.200000000000000 0.400000000000000 0.800000000000000 0.600000000000000 0.200000000000000 0.400000000000000 0.800000000000001 0.600000000000001 0.200000000000003 0.400000000000006 

y =

0.100000000000000 0.200000000000000 0.900000000000000 0.800000000000000 0.100000000000000 0.200000000000000 0.900000000000000 0.800000000000001 0.100000000000001 0.200000000000003 0.400000000000006 

b =

-0.400000000000000 0.700000000000000 0.900000000000000 -0.200000000000000 -0.400000000000000 0.700000000000000 0.900000000000000 -0.199999999999999 -0.399999999999999 -0.299999999999997 0.400000000000006 
+0

Gemäß Gleichung 4 steigt "k" von "n" auf "n + N-1". Also verwendet '\ beta_inverse (s_n)' 's_n'? Wie? Ich glaube auch nicht, dass es 's (9), ..., s (1)' verwendet. Eine andere Sache, müssen wir die ganze Frage lesen, um zu antworten? –

+0

S_n ist ein Vektor von n Symbolen und Sie haben Recht, S_10 verwendet s_10, s_11 und so weiter. Zum Beispiel S = beta (binär_von_x) = beta (0,101) = 0,01 – SKM

+0

Es gibt zu viele große Änderungen in Ihren Fragen OP, oft nachdem Antworten gegeben wurden. Dies ist die Nummer sechs, wenn der Speicher ordnungsgemäß funktioniert. Wenn ich Zeit habe, werde ich versuchen, diese einem Moderator zu melden. In der Zwischenzeit bitte ich von solchen wichtigen Änderungen ab. Wir behalten uns vor, Fragen in der Form zu behandeln, in der sie gestellt wurden, es sei denn, es liegen mildernde Umstände vor. – halfer

Antwort

2

dieses Stück Code völlig falsch ist, ändern Sie s (k) aber du verwendest s (k + 1), es bedeutet, dass die Änderung von s (k) keine Auswirkung hat!

for k =1: N 
    if s1(k)== -1 
     s1(k) = 0; 
    end 
b(k) = 0.5*s1(k+1) + 0.5*b(k+1); 
end 

wahre ist:

for k =1: N+1 
    if s1(k)== -1 
     s1(k) = 0; 
    end 
    end 
    for k =1: N 
     b(k) = 0.5*s1(k+1) + 0.5*b(k+1); 
    end 

y =

Spalten 1 bis 10

0.1000 0.2000 0.9000 0.8000 0.1000 0.2000 0.9000 0.8000 0.1000 0.2000 

Säule 11

0.4000 

b =

Spalten 1 bis 10

0.1000 0.2000 0.9000 0.8000 0.1000 0.2000 0.9000 0.8000 0.1000 0.2000 

Säule 11

0.4000 

x = 0,1 0,2 0,4 0,8

1) b = x => b = 0,1 0,2 0,4 0,8

2) s1 = 2 (b> = 0,5) -1 => s1 = -1 -1 -1 1

3) Schleife auf s1 => s1 = 0 0 0 1

4) b (3) = 0,5 s * (4) +0.5 (b4) = 0,5 + 0,4 = 0,9

Der Code ist korrekt, aber die Formel stimmt! und eine andere Sache,> Schritt 3 und 4 löschen sich gegenseitig aus, ich meine Ergebnis von Schritt 3 und 4 zusammen ist (b> 0,5), und als eine Schlussfolgerung! Es ist offensichtlich aus Ihrer Formel, dass, wenn x (i)> 0,5 und x (i-1) < 0,5 dann b (i-1) nicht gleich x (i-1)

weil b (i-1) = 0,5 * x (i) 0,5 * ((x (i)> 0,5))

und wenn wir annehmen, x (i)> 0,5 wir schreiben konnten:

b (i-1) = 0,5 * X (i) + 0,5 * 1

und wir kennen x (i) = mod (2x (i-1), 1) = 2 * x (i-1) {weil x (i-1) < 0,5 so 2 * x (i-1) < 1}

so haben wir

b (i-1) = 0,5 * 2 * X (i-1) + 0,5 * 1 = X (i-1) + 0,5 => b (i-1)> 0,5, aber x (i- 1) < 0,5 !!!!!

so ist Ihre Formel falsch.

+0

Vielen Dank für Ihre Antwort.Das Hauptproblem, das Konvertieren der Binärdatei in Real, wie von Ihrer korrigierten Implementierung durchgeführt, ist jedoch nicht gleich den ursprünglichen reellen Zahlen, x. Warum sind Werte in b nicht gleich den Werten in x? – SKM

+0

Außerdem gibt es einen neuen Fehler, dass ich versuche, auf s1 zuzugreifen (129); Index außerhalb der Grenzen, da Größe (s1) = [128] (wobei N = 128 statt N = 10 – SKM

+0

Größe der x überprüfen (oder b, etc) wenn es 128 ist, muss N 127 sein! –