Mathematische Modelle des Chaos

EinfĂŒhrung


Habr hat die Chaostheorie bereits in Artikeln [1,2,3] diskutiert. Die folgenden Aspekte der Chaostheorie werden in diesen Artikeln behandelt: verallgemeinertes Diagramm des Chua-Generators; Modellierung der Dynamik des Lorentz-Systems; Lorentz-, Rössler-, Rikitake- und Nose-Hoover-Attraktoren, programmiert durch logisch integrierte Schaltkreise.

Chaostheoretische Techniken werden jedoch auch verwendet, um biologische Systeme zu modellieren, die zweifellos eines der chaotischsten Systeme von allen sind, die man sich vorstellen kann. Dynamische Ausgleichssysteme wurden verwendet, um alles von Population und epidemischem Wachstum bis hin zu arrhythmischen HerzschlÀgen zu modellieren [4].

TatsĂ€chlich kann fast jedes chaotische System modelliert werden - der Wertpapiermarkt generiert Kurven, die mit seltsamen Attraktoren leicht analysiert werden können. Der Vorgang, Tropfen aus einem undichten Wasserhahn fallen zu lassen, ist zufĂ€llig, wenn er mit dem bloßen Ohr analysiert wird. Wenn er jedoch als seltsamer Attraktor dargestellt wird, öffnet er sich eine ĂŒbernatĂŒrliche Ordnung, die mit traditionellen Mitteln nicht zu erwarten war.

Der Zweck dieses Artikels ist es, die Theorie des Chaos am Beispiel der Erhöhung der Anzahl biologischer Populationen und der Verdoppelung des Zyklus in mechanischen Systemen mit grafischer Visualisierung mathematischer Modelle zu untersuchen, die auf einfachen intuitiven Programmen basieren, die in Python geschrieben wurden.

Der Artikel wurde zum Zweck des Unterrichts geschrieben, ermöglicht aber auch einem Leser ohne Programmiererfahrung, die oben genannten Programme zu verwenden, um die meisten neuen Bildungsprobleme zum Thema Modellierung von ChaosphÀnomenen unabhÀngig zu lösen.

Verdoppelung der Periode von Zyklen und Chaos am Beispiel des Wachstums der Anzahl biologischer Populationen


Betrachten wir zunÀchst die logistische Differentialgleichung, die einen begrenzten und keinen exponentiellen Anstieg der Anzahl biologischer Populationen modelliert:

 fracdNdt=aN−bN2,(a,b>0).(1)

Diese Gleichung kann exotische und unerwartete Verhaltensmuster einiger Populationen vorhersagen. In der Tat, gemĂ€ĂŸ (1), fĂŒr t rightarrow+ infty Die BevölkerungsgrĂ¶ĂŸe nĂ€hert sich der Grenze gleich a / b .

FĂŒr die numerische Lösung der logistischen Differentiallösung können Sie den einfachsten Algorithmus verwenden, wobei der numerische Wert des Zeitschritts verwendet wird tn+1=tn+h Dann kann die Lösung (1) durch wiederholtes Anwenden der folgenden Beziehung erhalten werden:

Nn+1=Nn+(aNn−bNn2)h. (2)

Wir stellen Gleichung (2) in Form einer logistischen Gleichung in endlichen Differenzen dar:

Nn+1=rNn−sNn2 . (3)

wobei: r = 1 + ah und s = bh .
Substitution in (3) Nn= fracrsxn Wir erhalten die iterative Formel:

xn+1=rxn(1−xn) , (4)

Wenn wir die durch Beziehung (3) gegebenen Werte berechnen, können wir eine Sequenz erzeugen x1,x2,x3,.....
Die Maximalwerte der Anzahl der Populationen, die die Umgebung zu bestimmten Zeiten unterstĂŒtzt t1,t2,t3. .

Wir gehen davon aus, dass es einen Grenzwert fĂŒr BrĂŒche gibt, die einen Teil der BevölkerungsgrĂ¶ĂŸe ausdrĂŒcken:

x infty= limn to inftyxn , (5).

Wir werden untersuchen, wie es darauf ankommt x infty aus dem Wachstumsparameter r in Gleichung (4). Zu diesem Zweck schreiben wir in Python ein Programm, das mit beginnt x1=$0, berechnet die Ergebnisse bei mehreren hundert Iterationen ( n = 200 ) fĂŒr r = 1,5; 2,0; 2,5 :

Programmcode
# -*- coding: utf8 -*- from numpy import * print(" nr=1,5 r=2,0 r=2,5 ") M=zeros([201,3]) a=[1.5,2.0,2.5] for j in arange(0,3,1): M[0,j]=0.5 for j in arange(0,3,1): for i in arange(1,201,1): M[i,j]=a[j]*M[i-1,j]*(1-M[i-1,j]) for i in arange(0,201,1): if 0<=i<=2: print(" {0: 7.0f} {1: 7.4f} {2: 7.4f} {3: 7.4f} " . format(i,M[i,0],M[i,1],M[i,2])) elif 2<i<=5: print(".") elif 197<=i<=200: print(" {0: 7.0f} {1: 7.4f} {2: 7.4f} {3: 7.4f} " . format(i,M[i,0],M[i,1],M[i,2])) 


Das Ergebnis des Programms (um die Ausgabe der Ergebnisse zu reduzieren, werden die ersten drei und letzten vier Werte angegeben):

  nr=1,5 r=2,0 r=2,5 0 0.5000 0.5000 0.5000 1 0.3750 0.5000 0.6250 2 0.3516 0.5000 0.5859 . . . 197 0.3333 0.5000 0.6000 198 0.3333 0.5000 0.6000 199 0.3333 0.5000 0.6000 200 0.3333 0.5000 0.6000 

Eine Analyse des diskreten Modells zeigt, dass fĂŒr r = 1,5; 2,0; 2,5 mit einer Zunahme der Anzahl von Iterationen der Wert ist xn stabilisiert sich und wird fast gleich dem Grenzwert x infty , die durch Beziehung (5) bestimmt wird. DarĂŒber hinaus ist fĂŒr die gegebenen Werte von r die Menge x infty entsprechend gleich x infty=0,3333;0,5000;$0,600 .
Wir erhöhen r = 3,1; 3,25; 3,5 und die Anzahl der Iterationen n = 1008, dafĂŒr nehmen wir folgende Änderungen am Programm vor:

Programmcode
 # -*- coding: utf8 -*- from numpy import * print(" nr=3,1 r=3,25 r=3,5 ") M=zeros([1008,3]) a= [3.1,3.25,3.5] for j in arange(0,3,1): M[0,j]=0.5 for j in arange(0,3,1): for i in arange(1,1008,1): M[i,j]=a[j]*M[i-1,j]*(1-M[i-1,j]) for i in arange(0,1008,1): if 0<=i<=3: print(" {0: 7.0f} {1: 7.4f} {2: 7.4f} {3: 7.4f} " . format(i,M[i,0],M[i,1],M[i,2])) elif 4<i<=7: print(".") elif 1000<=i<=1007: print(" {0: 7.0f} {1: 7.4f} {2: 7.4f} {3: 7.4f} " . format(i,M[i,0],M[i,1],M[i,2])) 


Das Ergebnis des Programms (um die Ausgabe der Ergebnisse zu reduzieren, werden die ersten vier und letzten acht Werte angegeben):

  nr=3,1 r=3,25 r=3,5 0 0.5000 0.5000 0.5000 1 0.7750 0.8125 0.8750 2 0.5406 0.4951 0.3828 3 0.7699 0.8124 0.8269 . . . 1000 0.5580 0.4953 0.5009 1001 0.7646 0.8124 0.8750 1002 0.5580 0.4953 0.3828 1003 0.7646 0.8124 0.8269 1004 0.5580 0.4953 0.5009 1005 0.7646 0.8124 0.8750 1006 0.5580 0.4953 0.3828 1007 0.7646 0.8124 0.8269 

Wie aus den obigen Daten folgt, schwankt der Bruchteil der Bevölkerung zwischen zwei Fraktionen, wenn sich die Zeit Ă€ndert, anstatt sich in der NĂ€he einer einzelnen begrenzenden Population zu stabilisieren. Im Vergleich zu r = 3,1 verdoppelt sich die Zyklusdauer fĂŒr r = 3,25 und fĂŒr r = 3,5 viermal.

Programm zur grafischen Darstellung von Bevölkerungswachstumszyklen
 # -*- coding: utf8 -*- import matplotlib.pyplot as plt from numpy import * M=zeros([1008,3]) a= [3.1,3.25,3.5] for j in arange(0,3,1): M[0,j]=0.5 for j in arange(0,3,1): for i in arange(1,1008,1): M[i,j]=a[j]*M[i-1,j]*(1-M[i-1,j]) x=arange(987,999,1) y=M[987:999,0] y1=M[987:999,1] y2=M[987:999,2] plt.title('     r=3,1;3,25;3,5') plt.plot(x,y, label="T=1,ymax=%s,ymin=%s"%(round(max(y),3),round(min(y),3))) plt.plot(x,y1, label="T=2,ymax=%s,ymin=%s"%(round(max(y1),3),round(min(y1),3))) plt.plot(x,y2, label="T=4,ymax=%s,ymin=%s"%(round(max(y2),3),round(min(y2),3))) plt.grid() plt.legend(loc="best") plt.ylabel("x(n)") plt.xlabel("n") plt.show() 


Das Ergebnis des Programms:



Aufgrund der Verdoppelung der Iterationsperiode xn+1=rxn(1−xn) wurde weithin bekannt. Wenn der Wert der Wachstumsrate r = 3,56 ĂŒberschreitet, beschleunigt sich die Verdoppelung der Periode und es entsteht bereits am Punkt r = 3,57 ein extremes Chaos. Um den Beginn des Chaos anzuzeigen, verwenden wir das folgende Programm:

Programmcode
 # -*- coding: utf8 -*- import matplotlib.pyplot as plt from numpy import * print(" nr=3,57 ") M=zeros([1041,1]) a= [3.57] for j in arange(0,1,1): M[0,j]=0.5 for j in arange(0,1,1): for i in arange(1,1041,1): M[i,j]=a[j]*M[i-1,j]*(1-M[i-1,j]) for i in arange(0,1041,1): if 1000<=i<=1015: print(" {0: 7.0f} {1: 7.4f}" . format(i,M[i,0])) x=arange(999,1040,1) y=M[999:1040,0] plt.title('     r=3,57') plt.plot(x,y) plt.grid() plt.ylabel("x(n)") plt.xlabel("n") plt.show() 


Das Ergebnis des Programms:
  nr=3,57 1000 0.4751 1001 0.8903 1002 0.3487 1003 0.8108 1004 0.5477 1005 0.8844 1006 0.3650 1007 0.8275 1008 0.5096 1009 0.8922 1010 0.3434 1011 0.8050 1012 0.5604 1013 0.8795 1014 0.3784 1015 0.8397 

Bild

Wir werden ein Programm zur Visualisierung der AbhĂ€ngigkeit des Iterationsverhaltens vom Wachstumsparameter r schreiben. FĂŒr jeden Wert von r im Intervall a leqslantr leqslantb 1000 Iterationen werden durchgefĂŒhrt, um StabilitĂ€t zu erreichen. Dann werden alle 250 Werte, die als Ergebnis von Iterationen erhalten wurden, entlang der vertikalen Achse aufgetragen und bilden Punkte ( r, x ):

Programmcode
 # -*- coding: utf8 -*- import matplotlib.pyplot as plt from numpy import* N=1000 y=[] y.append(0.5) for r in arange(2.8,4.0,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.title("   2,8<= r<=4,0,0<=x<=1") plt.xlabel("r") plt.ylabel("y") plt.axvline(x=3.01,color='black',linestyle='--') plt.axvline(x=3.45, color='black',linestyle='--') plt.axvline(x=3.6,color='black',linestyle='--') plt.axvline(x=3.7,color='black',linestyle='--') plt.axvline(x=3.8,color='black',linestyle='--') plt.axvline(x=3.9,color='black',linestyle='--') plt.show() 


Das Ergebnis in Form eines Diagramms:



Das resultierende Diagramm wird als „Verzweigungsdiagramm“ bezeichnet , mit dem Sie bestimmen können, ob ein bestimmter r- Wert einem Zyklus oder einem Chaos entspricht. Der einzige Wert der BevölkerungsgrĂ¶ĂŸe wird zu bestimmt r ca.3 dann ein Zyklus mit einer Periode von 2 bis r ca.3,4 , dann ein Zyklus mit einer Periode von 4, dann ein Zyklus mit einer Periode von 8 und einer schnellen AnnĂ€herung an das Chaos.

Es ist zu beachten, dass die vertikalen Bereiche des nicht ausgefĂŒllten Raums im Diagramm die Bereiche r = 3,6 und r = 3,7 sind , zwischen r = 3,7 und r = 3,8 , zwischen r = 3,8 und r = 3,9 wo die zyklische Ordnung aus dem vorherigen Chaos zurĂŒckkehrt.
BerĂŒcksichtigung des Auftretens eines Zyklus mit einem Periodenmultiplikator von 3 in der Region 3.8 leqslantr leqslant$3. Nehmen Sie Änderungen am vorherigen Programm vor:

Programmcode
 # -*- coding: utf8 -*- import matplotlib.pyplot as plt from numpy import* N=1000 y=[] y.append(0.5) for r in arange(3.8,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.title("   3,8<= r<=3,9,0<=x<=1") plt.xlabel("r") plt.ylabel("y") plt.axvline(x=3.83,color='black',linestyle='--') plt.show() 


Das Ergebnis des Programms:



Der Zyklus der Periode 3 erscheint in der NĂ€he des Punktes r = 3,83 und wird dann nacheinander in die Zyklen 6, 12, 24 unterteilt. Die Existenz eines Zyklus mit Periode 3 impliziert das Vorhandensein von Zyklen einer anderen endlichen Periode sowie von chaotischen Zyklen ohne jegliche Periode.

Das Verzweigungsdiagramm ermöglicht es Ihnen, die Entwicklung des Systems mit einer reibungslosen Änderung des Parameters zu verfolgen. Mit einem festen Wert des Parameters ermöglicht das Spinnendiagramm (Lamera-Diagramm) die Verfolgung der Punktbahnen.

Durch die Erstellung eines Spinnendiagramms können Sie verschiedene Effekte identifizieren, die im Verzweigungsdiagramm nicht sichtbar sind. Schreiben wir ein Programm:

Programmcode
 # -*- coding: utf8 -*- import matplotlib.pyplot as plt from numpy import * a=2.7 x1=0.62 def ff(x): return a*x*(1-x) b=a*x1*(1-x1)/x1 def fl(x): return b*x x=0.1 y=0 Y=[] X=[] for i in arange(1,30,1): X.append(x) Y.append(y) y=ff(x) X.append(x) Y.append(y) x=y/b plt.title('   \n  λx(1-x)  λ = 2.7') 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() 


Kameradiagramm:

Lameria-Diagramm

Periodenverdopplung in mechanischen Systemen


Stellen Sie sich eine Differentialgleichung vor, die freie gedÀmpfte Schwingungen eines Materialpunkts einer bestimmten Masse auf einer nichtlinearen Feder modelliert, bei der die DÀmpfung durch die Geschwindigkeit bestimmt wird.

mx″+cxâ€Č+kx+ betax3=0 (6)

In Gleichung (6) reprĂ€sentiert der Term kx die Kraft einer linearen Feder, die auf einen Materialpunkt einer gegebenen Masse ausgeĂŒbt wird, und den Term  betax3 reprĂ€sentiert die tatsĂ€chliche NichtlinearitĂ€t der Feder.

Wenn eine Kraft auf das System der freien Schwingungen (6) wirkt, wird die Verschiebung des Materialpunkts der Masse, auf die diese Kraft angewendet wird, durch die Duffing-Differentialgleichung fĂŒr erzwungene Schwingungen beschrieben:

mx″+cxâ€Č+kx+ betax3=F0cos omegat (7)

Gleichung (7) fĂŒr die meisten darin enthaltenen Parameter wird numerisch gelöst. Das mechanische System fĂŒr das mathematische Modell gemĂ€ĂŸ Gleichung (7) ist in der Abbildung dargestellt:

Bild

Ein Merkmal des gegebenen Systems ist, dass anstelle einer Feder ein flexibles Metallgewinde verwendet wird, das in einer vertikalen Ebene schwingt, fĂŒr die die Hakenkonstante k negativ ist. In diesem Schema sind die Punkte des stabilen Gleichgewichts (a) und (c) und der Punkt des instabilen Gleichgewichts (b).

Wenn ein Materialpunkt aus Position (b) verschoben wird, ist die auf ihn wirkende Kraft abstoßend. Wenn beispielsweise die durch das oszillierende Magnetfeld erzeugte periodische Kraft durch den Luftwiderstand teilweise gedĂ€mpft wird. Dann ist Gleichung (7) ein akzeptables mathematisches Modell fĂŒr die horizontale Verschiebung x (t) eines Materialpunkts mit den folgenden Parameterbereichen k<0,c>0, beta>0 .

Um das Verhalten eines solchen nichtlinearen Systems zu untersuchen, nehmen wir k=−1,m=c= beta= omega=1 dann nimmt die Differentialgleichung (7) die Form an:

x″+xâ€Č−x+x3=F0cos(t) , (8)

Wir schreiben ein Programm zur numerischen Integration von Gleichung (8) unter den Anfangsbedingungen x(0)=1,xâ€Č(0)=0 im Gebiet 100 leqslantt leqslant200 und fĂŒr jeden der folgenden Amplitudenwerte F0=0,6;0,7;0,75;0,8 Zeichnen Sie in jedem Fall die Lösungen fĂŒr die Flugzeuge x(t),xâ€Č(t) und t,x(t) ::

Programmcode
 # -*- coding: utf8 -*- from numpy import * from scipy. integrate import odeint import matplotlib.pyplot as plt for F in [0.6,0.7,0.75,0.8]: def f(y,t): y1,y2=y return [y2,-y2-y1**3+y1+F*cos(t)] t=arange(100,200,0.001) y0=[1.0,0.0] [y1,y2]=odeint(f, y0, t, full_output=False,rtol=1e-12).T if F==0.6: plt.subplot(221) plt.title('  F=0.6,T=2'r'$\pi$') plt.plot(y1,y2, color='black', linestyle=' ', marker='.', markersize=0.1) plt.grid(True) plt.subplot(222) plt.title(' x(t): F=0.6,T=2'r'$\pi$') plt.plot(t,y1, color='black', linestyle=' ', marker='.', markersize=0.1) plt.grid(True) elif F==0.7: plt.subplot(223) plt.plot(y1,y2, color='black', linestyle=' ', marker='.', markersize=0.1, label='  \n F=0.7,T=4'r'$\pi$') plt.legend(loc='upper left') plt.grid(True) plt.subplot(224) plt.plot(t,y1, color='black', linestyle=' ', marker='.', markersize=0.1, label=' x(t): F=0.7,T=4'r'$\pi$') plt.legend(loc='upper left') plt.grid(True) plt.show() if F==0.75: plt.subplot(221) plt.title('  F=0.75,T=8'r'$\pi$') plt.plot(y1,y2, color='black', linestyle=' ', marker='.', markersize=0.1) plt.grid(True) plt.subplot(222) plt.title(' x(t): F=0.75,T=8'r'$\pi$') plt.plot(t,y1, color='black', linestyle=' ', marker='.', markersize=0.1) plt.grid(True) elif F==0.8: plt.subplot(223) plt.plot(y1,y2, color='black', linestyle=' ', marker='.', markersize=0.1, label=' \n F=0.8,') plt.legend(loc='upper left') plt.grid(True) plt.subplot(224) plt.plot(t,y1, color='black', linestyle=' ', marker='.', markersize=0.1, label=' x(t): F=0.8,') plt.legend(loc='upper left') plt.grid(True) plt.show() 


Diagramme als Ergebnis des Programms

Bild



Dieser Übergang von der Periodenverdopplung zum Chaos zeigt das allgemeine Verhalten eines nichtlinearen mechanischen Systems als Reaktion auf eine Änderung des entsprechenden physikalischen Parameters, zum Beispiel: k,m,c, beta, omega,F0 . Solche PhĂ€nomene treten in linearen mechanischen Systemen nicht auf.

Attraktor Lorenz


Die Substitution erzwungener Schwingungen (7) in die Duffing-Gleichung fĂŒhrt zu einem zweidimensionalen nichtlinearen System von Differentialgleichungen, das in der vorherigen Auflistung gezeigt wurde. Ein dreidimensionales nichtlineares System von Differentialgleichungen, wie es auf meteorologische Probleme angewendet wird, wurde von E.N. Lorenz:

 fracdxdt=−sx+sy,
 fracdydt=−xz+rx−y, (9)
 fracdzdt=xy−dz

Die Lösung fĂŒr System (9) lĂ€sst sich am besten in Projektion auf eine der drei Ebenen betrachten. Wir werden ein Programm zur numerischen Integration fĂŒr die Parameter b = \ frac {8} {3}, s = 10, r = 28 und die Anfangsbedingungen x (0) = - 8, y (0) = 8, z (0) = 27 schreiben:

Programmcode
 # -*- coding: utf8 -*- import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt s,r,b=10,28,8/3 def f(y, t): y1, y2, y3 = y return [s*(y2-y1), -y2+(r-y3)*y1, -b*y3+y1*y2] t = np.linspace(0,20,2001) y0 = [-8, 8, 27] [y1,y2,y3]=odeint(f, y0, t, full_output=False).T plt.plot(y1,y3, color='black', linestyle=' ', marker='.', markersize=2) plt.xlabel('x') plt.ylabel('z') plt.grid(True) plt.title("     xz") plt.show() 


Das Ergebnis des Programms:

Bild

Wenn man das Bild in der Grafik ĂŒber die Zeit betrachtet, kann angenommen werden, dass der Punkt P (x (t), y (t), z (t)) eine zufĂ€llige Anzahl von Schwingungen rechts oder links erzeugt. FĂŒr eine meteorologische Anwendung des Lorenz-Systems folgt nach einer zufĂ€lligen Anzahl klarer Tage eine zufĂ€llige Anzahl von Regentagen.

Stellen Sie sich ein Programm zur Abbildung des Lorentz-Attraktors in der xyz- Ebene fĂŒr leicht unterschiedliche Anfangsbedingungen vor:

Programmcode
 # -*- coding: utf8 -*- import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D #     . s,r,b=10,25,3 def f(y, t): y1, y2, y3 = y return [s*(y2-y1), -y2+(r-y3)*y1, -b*y3+y1*y2] #        t = np.linspace(0,20,2001) y0 = [1, -1, 10] [y1,y2,y3]=odeint(f, y0, t, full_output=False).T fig = plt.figure(facecolor='white') ax=Axes3D(fig) ax.plot(y1,y2,y3,linewidth=2) plt.xlabel('y1') plt.ylabel('y2') plt.title(" : y0 = [1, -1, 10]") y0 = [1.0001, -1, 10] [y1,y2,y3]=odeint(f, y0, t, full_output=False).T fig = plt.figure(facecolor='white') ax=Axes3D(fig) ax.plot(y1,y2,y3,linewidth=2) plt.xlabel('y1') plt.ylabel('y2') plt.title(" : y0 = [1.0001, -1, 10]") plt.show() 


Die Ergebnisse des Programms sind in den folgenden Grafiken dargestellt:

Bild

Bild

Aus den obigen Diagrammen folgt, dass eine Änderung des Anfangszustands von 1,0 auf 1.0001 die Art der Änderung des Lorentz-Attraktors dramatisch Ă€ndert.

Rossler-System


Dies ist ein sehr intensiv untersuchtes nichtlineares dreidimensionales System:
 fracdxdt=−y−z,
 fracdydt=x− alphay, (10)
 fracdzdt=b+x(x−c).

Wir werden ein Programm zur numerischen Integration von System (10) fĂŒr die folgenden Parameter a = 0,39, b = 2, c = 4 unter den Anfangsbedingungen x (0) = 0, y (0) = 0, z (0) = 0 schreiben:

Programmcode
 # -*- coding: utf8 -*- import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt a,b,c=0.398,2.0,4.0 def f(y, t): y1, y2, y3 = y return [(-y2-y3), y1+a*y2, b+y3*(y1-c)] t = np.linspace(0,50,5001) y0 = [0,0, 0] [y1,y2,y3]=odeint(f, y0, t, full_output=False).T plt.plot(y1,y2, color='black', linestyle=' ', marker='.', markersize=2) plt.xlabel('x') plt.ylabel('y') plt.grid(True) plt.title("     xy") plt.show() 


Das Ergebnis des Programms:

Grafik

Im Flugzeug sieht Rosslers Band wie eine Schleife aus, aber im Weltraum stellt sich heraus, dass es wie ein Möbius-Band verdreht ist.

Schlussfolgerungen


Um die PhÀnomene des Chaos zu demonstrieren, werden einfache und intuitive Programme in einer Python-Programmiersprache auf hoher Ebene vorgestellt, die leicht auf neue Projekte zu diesem Thema aktualisiert werden können. Der Artikel hat einen pÀdagogischen und methodischen Schwerpunkt und kann im Lernprozess verwendet werden.

Referenzen


  1. Ein bisschen ĂŒber Chaos und wie man es schafft
  2. Ein kritischer Blick auf den Lorenz-Attraktor
  3. FPGA Chaos Generatoren
  4. Differentialgleichungen und Randwertprobleme: Modellierung und Berechnung mit Mathematica, Maple und MATLAB. 3. Auflage .: Per. aus dem Englischen - M.: LLC “I.D. Williams, 2008. - 1104 p.: Ill. - Paral. tit. Englisch

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


All Articles