Informationsentropie des Chaos



Einführung


Es gibt viele Veröffentlichungen über Habr, die das Konzept der Entropie diskutieren, hier nur einige davon [1 ÷ 5]. Die Publikationen wurden von den Lesern positiv aufgenommen und stießen auf großes Interesse. Es reicht aus, die vom Autor der Veröffentlichung [1] angegebene Definition der Entropie anzugeben: „Entropie gibt an, wie viele Informationen Sie nicht über das System wissen.“ Veröffentlichungen über das Chaos-Phänomen auf Habr sind ebenfalls ausreichend [6–9]. Das Verhältnis von Entropie und Chaos in beiden Publikationsgruppen wurde jedoch nicht berücksichtigt.

Dies liegt an der Tatsache, dass unterschiedliche Wissensbereiche unterschiedliche Arten von Chaosmaßstäben unterscheiden:

  • informativ;
  • thermodynamisch;
  • Differential;
  • kulturell.

Chaosmaßnahmen werden auch unter Berücksichtigung ihrer Spezifität beschrieben, selbst in einem dieser Bereiche ist dies recht schwierig.

Um die Aufgabe so weit wie möglich zu vereinfachen, habe ich mich entschlossen, die Beziehung zwischen Informationsentropie und Chaos am Beispiel der Ähnlichkeit der Übergangsbereiche von Ordnung zu Chaos in den Diagrammen in Form von Punktabbildungen und in den Diagrammen des Entropiekoeffizienten für diese Regionen zu betrachten.

Was dabei herausgekommen ist, erfahren Sie, wenn Sie unter die Katze schauen.

Die Mechanismen des Übergangs von Ordnung zu Chaos


Eine Analyse der Mechanismen des Übergangs von der Ordnung zum Chaos in realen Systemen und verschiedenen Modellen hat die Vielseitigkeit relativ weniger Szenarien des Übergangs zum Chaos gezeigt. Der Übergang zum Chaos kann in Form eines Bifurkationsdiagramms dargestellt werden (der Begriff „Bifurkation“ bezeichnet qualitative Umlagerungen des Systems mit der Entstehung einer neuen Art seines Verhaltens).

Der Eintritt des Systems in den unvorhersehbaren Modus wird durch eine Kaskade von Gabelungen beschrieben, die nacheinander folgen. Die Kaskade von Bifurkationen führt nacheinander zu einer Wahl zwischen zwei Lösungen, dann vier usw. Das System beginnt in einem chaotischen, turbulenten Modus zu schwingen, bei dem die Anzahl der möglichen Werte nacheinander verdoppelt wird.

Wir betrachten Verzweigungen der Periodenverdopplung und das Auftreten von Chaos in Punktzuordnungen. Die Anzeige ist eine Funktion, die die Abhängigkeit der folgenden Werte der Systemparameter von vorherigen Werten anzeigt:

xn+1=f(xn)= lambdaxn(1xn)

Betrachten Sie auch die zweite häufig verwendete Funktion:

xn+1=f(xn)= lambda cdotxn cdot(1xn2)

Mithilfe von Punktzuordnungen werden Objekte nicht kontinuierlich, sondern zeitdiskret untersucht . Beim Übergang zur Anzeige kann sich die Dimension des untersuchten Systems verringern.

Beim Ändern des externen Parameters \ lambda zeigen Punktzuordnungen ein ziemlich kompliziertes Verhalten, das bei ausreichend großem \ lambda chaotisch wird. Chaos ist eine sehr schnelle Rezession von Flugbahnen im Phasenraum.

Bifurkation ist eine qualitative Umstrukturierung des Films. Die Werte des Steuerparameters, bei denen Bifurkationen auftreten, werden als kritische Werte oder Bifurkationswerte bezeichnet.

Um die Diagramme zu erstellen, verwenden wir die folgenden zwei Auflistungen:

Nr. 1. Für die Funktion: xn+1=f(xn)= lambdaxn(1xn)

Programmliste
# -*- coding: utf8 -*- import matplotlib.pyplot as plt from numpy import * def f(a,x0): x1=(a-1)/a#     def ff(x):#  return a*x*(1-x) def fl(x): return x x=x0;y=0;Y=[];X=[] for i in arange(1,1000,1): X.append(x) Y.append(y) y=ff(x) X.append(x) Y.append(y) x=y plt.title('   \n\ $x_{n+1}=\lambda \cdot x_{n}\cdot (1-x_{n})$  $\lambda$ =%s  x0=%s '%(a,x0)) plt.plot(X,Y,'r') x1=arange(0,1,0.001) y1=[ff(x) for x in x1] y2=[fl(x) for x in x1] plt.plot(x1,y1,'b') plt.plot(x1,y2,'g') plt.grid(True) plt.show() 

Nr. 2. Für die Funktion xn+1=f(xn)= lambda cdotxn cdot(1xn2)

Programmliste
 # -*- coding: utf8 -*- import matplotlib.pyplot as plt from numpy import * def f(a,x0): x1=((a-1)/a)**0.5 def ff(x):#  return a*x*(1-x**2) def fl(x): return x x=x0;y=0;Y=[];X=[] for i in arange(1,1000,1): X.append(x) Y.append(y) y=ff(x) X.append(x) Y.append(y) x=y plt.title('   \n\ $x_{n+1}=\lambda \cdot x_{n}\cdot (1-x_{n}^{2})$  $\lambda$ =%s  x0=%s '%(a,x0)) plt.plot(X,Y,'r') x1=arange(0,1,0.001) y1=[ff(x) for x in x1] y2=[fl(x) for x in x1] plt.plot(x1,y1,'b') plt.plot(x1,y2,'g') plt.grid(True) plt.show() 


Bewertung der Auswirkungen der Art der logistischen Funktion auf kritische Werte  lambdaBetrachten Sie Diagramme mit einer Funktion xn+1=f(xn)= lambdaxn(1xn)Hierfür verwenden wir Listing Nr. 1:

Für 0 <\ lambda <1 für  lambda=$0,9und x0 = 0,47 erhalten wir das Diagramm:



In diesem Fall hat die Karte einen einzelnen festen Punkt x=0
das ist nachhaltig.

Bei 1< lambda<3für  lambda=$2,x0 = 0,7 wir erhalten das Diagramm:



Auf dem Segment [0, 1] erscheint ein weiterer fester Fixpunkt x1=11/ lambda

Bei 1< lambda<3für  lambda=$2,und x0 = 0,01 erhalten wir das Diagramm:



Fixpunkt x=0verliert an Stabilität.

Bei 3< lambda<3,45für  lambda=$3.4und x0 = 0,7 erhalten wir das Diagramm:



Das Mapping erfährt eine Bifurkation: Fixpunkt x1wird instabil und stattdessen erscheint ein Doppelzyklus.

Bei 3.45< lambda<4.0für  lambda=$3,5
und x0 = 0,2 erhalten wir das Diagramm:



Beim Übergeben eines Parameters  lambdadurch Wert  lambda=3,45Ein 2-facher Zyklus wird zu einem 4-fachen und darüber hinaus.

Zum Endwert  lambda=4Das System hat instabile Zyklen aller möglichen Aufträge:



Bewertung der Auswirkungen der Art der logistischen Funktion auf kritische Werte  lambdaBetrachten Sie Diagramme mit einer Funktion xn+1=f(xn)= lambda cdotxn cdot(1xn2), hierfür verwenden wir Listing Nr. 2.

Bei 0< lambda<=1,0für  lambda=0,5und x0 = 0,2:



Das Mapping hat einen einzelnen Fixpunkt x=0das ist nachhaltig.

Bei 1< lambda<=1,998...für  lambda=$1,und x0 = 0,55:



Punkt x=0verliert an Stabilität, erscheint ein neuer stabiler Punkt x1

Bei 1.99< lambda<=2.235...für  lambda=$2.und x0 = 0,2:



Wenn eine Bifurkation der Verdoppelung der Periode auftritt, erscheint ein zweifacher Zyklus. Weitere Erhöhung  lambdaführt zu einer Kaskade von Periodenverdopplungsgabelungen.

Bei 2,235< lambda2,5980...für  lambda=2.287und x0 = 0,2:



Erhöhen  lambdaführte zu einer Kaskade von Periodenverdopplungen.

Bei  lambda=2,59Das System hat instabile Zyklen aller möglichen Zeiträume:



Wie in den Diagrammen gezeigt, ist mit zunehmender Reihenfolge der logistischen Funktion der Bereich  lambdaverjüngt sich.

Mithilfe von Diagrammen haben wir den Pfad von der Reihenfolge zum Chaos verfolgt und dabei die Werte festgelegt  lambdafür verschiedene logistische Funktionen. Es bleibt die Frage zu beantworten: Wie kann man das Chaos messen? Die Antwort auf einige der am Anfang des Artikels aufgeführten Arten von Chaos ist bekannt
- Entropie ist ein Maß für Chaos. Diese Antwort kann vollständig auf das Informationschaos zurückgeführt werden. Welche Entropie wird hier angewendet und wie kann man sie mit dem bereits berücksichtigten numerischen Wert vergleichen?  lambda- Ich werde versuchen, diese Frage im nächsten Teil des Artikels zu beantworten.

Informationsentropie und Entropiekoeffizient


Wir werden die binäre Informationsentropie für unabhängige zufällige Ereignisse betrachten. xc nmögliche Zustände mit Wahrscheinlichkeiten verteilt pi(i=1,..,n). Die binäre Informationsentropie wird nach folgender Formel berechnet:

H(x)= sumi=1npi cdotlog2(pi)

Dieser Wert wird auch als mittlere Entropie der Nachricht bezeichnet. Wert Hi=log2(pi)private Entropie genannt, die nur den i- ten Zustand charakterisiert. Im allgemeinen Fall kann die Basis des Logarithmus in der Definition der Entropie größer als 1 sein; seine Wahl bestimmt die Maßeinheit der Entropie.

Wir werden dezimale Logarithmen verwenden, bei denen Entropie und Information in Bits gemessen werden. Die Informationsmenge in Bits wird korrekt berechnet, wenn beispielsweise Variablen verwendet werden Xund  Deltawird in die entsprechenden Ausdrücke für Entropie eingesetzt, egal in welcher, aber immer in den gleichen Einheiten. In der Tat:

q=H(x)H( Delta)=log10 left(X2X1 right)log10(2 Delta)=log10( fracX2X12 Delta)

wo X und  Deltamuss in den gleichen Einheiten sein.

Eine Schätzung des Entropiewertes einer Zufallsvariablen aus experimentellen Daten ergibt sich aus einem Histogramm aus der folgenden Beziehung:

 Deltae= frac12eH(x)= fracd2 prodi=1m( fracnni) fracnin= fracdn210 frac1n sumi=1mnilog10(ni)

wo: d–Breite jeder Spalte des Histogramms; m- Anzahl der Spalten; n-Gesamte Datenmenge; ni- Datenmenge in idiese Spalte.

Der Entropiekoeffizient wird aus dem Verhältnis bestimmt:

ke= frac Deltae sigma

wo:  sigma- Standardabweichung.

Informationsentropie als Maß für Chaos


Um die Phänomene des Informationschaos anhand des Entropiekoeffizienten zu analysieren, erstellen wir zunächst ein Verzweigungsdiagramm für die Funktion xn+1=f(xn)= lambdaxn(1xn)mit der Anwendung von Übergangsbereichen, die bei der Erstellung von Histogrammen erhalten wurden:

Verzweigungsdiagramm
 import matplotlib.pyplot as plt import matplotlib.pyplot as plt from numpy import* N=1000 y=[] y.append(0.5) for r in arange(3.58,3.9,0.0001): for n in arange(1,N,1): y.append(round(r*y[n-1]*(1-y[n-1]),4)) y=y[N-250:N] x=[r ]*250 plt.plot( x,y, color='black', linestyle=' ', marker='.', markersize=1) plt.figure(1) plt.title("   3,6<= $\lambda$ <=3,9") plt.xlabel("r") plt.ylabel("$\lambda$ ") plt.axvline(x=3.63,color='black',linestyle='--') plt.axvline(x=3.74,color='black',linestyle='--') plt.axvline(x=3.83,color='black',linestyle='--') plt.axvline(x=3.9,color='black',linestyle='--') plt.show() 


Wir bekommen:



Wir zeichnen für den Entropiekoeffizienten für die gleichen Bereiche  lambda::

Der Graph für den Entropiekoeffizienten
 import matplotlib.pyplot as plt from numpy import* data_k=[] m='auto' for p in arange(3.58,3.9,0.0001): q=[round(p,2)] M=zeros([1001,1]) for j in arange(0,1,1): M[0,j]=0.5 for j in arange(0,1,1): for i in arange(1,1001,1): M[i,j]=q[j]*M[i-1,j]*(1-M[i-1,j]) a=[] for i in arange(0,1001,1): a.append(M[i,0]) n=len(a) z=histogram(a, bins=m) if type(m) is str: m=len(z[0]) y=z[0] d=z[1][1]-z[1][0] h=0.5*d*n*10**(-sum([w*log10(w) for w in y if w!=0])/n) ke=round(h/std(a),3) data_k.append(ke) plt.title("  ke  3,6<= $\lambda$ <=3,9") plt.plot(arange(3.58,3.9,0.0001),data_k) plt.xlabel("$\lambda$ ") plt.ylabel("ke") plt.axvline(x=3.63,color='black',linestyle='--') plt.axvline(x=3.74,color='black',linestyle='--') plt.axvline(x=3.83,color='black',linestyle='--') plt.axvline(x=3.9,color='black',linestyle='--') plt.grid() plt.show() 


Wir bekommen:



Beim Vergleich des Diagramms und des Diagramms sehen wir eine identische Anzeige der Bereiche im Diagramm und im Diagramm für den Entropiekoeffizienten für die Funktion xn+1=f(xn)= lambdaxn(1xn).

Zur weiteren Analyse der Phänomene des Informationschaos anhand des Entropiekoeffizienten erstellen wir ein Verzweigungsdiagramm für die logistische Funktion: xn+1=f(xn)= lambda cdotxn cdot(1xn2)mit der Anwendung von Übergangsbereichen:

Verzweigungsdiagramm
 import matplotlib.pyplot as plt from numpy import* N=1000 y=[] y.append(0.5) for r in arange(2.25,2.56,0.0001): for n in arange(1,N,1): y.append(round(r*y[n-1]*(1-(y[n-1])**2),4)) y=y[N-250:N] x=[r ]*250 plt.plot( x,y, color='black', linestyle=' ', marker='.', markersize=1) plt.figure(1) plt.title("   2.25<=$\lambda$ <=2.56") plt.xlabel("$\lambda$ ") plt.ylabel("y") plt.axvline(x=2.34,color='black',linestyle='--') plt.axvline(x=2.39,color='black',linestyle='--') plt.axvline(x=2.45,color='black',linestyle='--') plt.axvline(x=2.49,color='black',linestyle='--') plt.axvline(x=2.56,color='black',linestyle='--') plt.show() 


Wir bekommen:



Wir zeichnen für den Entropiekoeffizienten für die gleichen Bereiche  lambda::

Entropiekoeffizientendiagramm
 import matplotlib.pyplot as plt from numpy import* data_k=[] m='auto' for p in arange(2.25,2.56,0.0001): q=[round(p,2)] M=zeros([1001,1]) for j in arange(0,1,1): M[0,j]=0.5 for j in arange(0,1,1): for i in arange(1,1001,1): M[i,j]=q[j]*M[i-1,j]*(1-(M[i-1,j])**2) a=[] for i in arange(0,1001,1): a.append(M[i,0]) n=len(a) z=histogram(a, bins=m) if type(m) is str: m=len(z[0]) y=z[0] d=z[1][1]-z[1][0] h=0.5*d*n*10**(-sum([w*log10(w) for w in y if w!=0])/n) ke=round(h/std(a),3) data_k.append(ke) plt.figure(2) plt.title("  ke  2.25<= $\lambda$ <=2.56") plt.plot(arange(2.25,2.56,0.0001),data_k) plt.xlabel("$\lambda$ ") plt.ylabel("ke") plt.axvline(x=2.34,color='black',linestyle='--') plt.axvline(x=2.39,color='black',linestyle='--') plt.axvline(x=2.45,color='black',linestyle='--') plt.axvline(x=2.49,color='black',linestyle='--') plt.axvline(x=2.56,color='black',linestyle='--') plt.grid() plt.show() 


Wir bekommen:



Beim Vergleich des Diagramms und des Diagramms sehen wir eine identische Anzeige der Bereiche im Diagramm und im Diagramm für den Entropiekoeffizienten für die Funktion xn+1=f(xn)= lambda cdotxn cdot(1xn2)

Schlussfolgerungen:


Das Bildungsproblem wird in dem Artikel gelöst: Ist die Informationsentropie ein Maß für das Chaos, und die Antwort auf diese Frage wird von Python bejaht.

Referenzen


  1. Entropie? Das ist einfach!
  2. Einführung in das Konzept der Entropie und ihre vielen Gesichter.
  3. Entropie- und Entscheidungsbäume.
  4. Eine Abhandlung über Entropie.
  5. Entropie und WinRAR.
  6. Mathematische Modelle des Chaos.
  7. Ein bisschen über Chaos und wie man es schafft.
  8. Ein kritischer Blick auf den Lorenz-Attraktor.
  9. FPGA-Chaosgeneratoren.

Source: https://habr.com/ru/post/de447874/


All Articles