Дивний атрактор ЛоренцаДи́вний атра́ктор Ло́ренца — атрактор, що демонструє хаотичну поведінку і є розв'язком системи трьох нелінійних диференціальних рівнянь, вперше записаних[1] в 1963 році Едвардом Лоренцом при розгляді конвекційного руху в однорідному шарі рідини, що підігрівається знизу. Рівняння Лоренца також описують конвекцію в кільцевій трубці[2] та поведінку одномодового лазера. Належить до класу так званих дивних атракторів. Варто зазначити, терміни хаос та дивний атрактор не вживалися в оригінальній роботі Лоренца (вони з'явилися в науковій літературі дещо пізніше), натомість йшлося про аперіодичні рухи. РівнянняПочатковою системою, яка в кінцевому результаті призводить до атрактора Лоренца, є однорідний шар рідини висотою H та з фіксованою різницею температур, ΔT між верхнім та нижнім рівнями. Якщо припустити, що всі рухи рідини паралельні площині XZ, та не відбувається змін в напрямку осі Y, то, записавши рівняння Нав'є — Стокса, рівняння неперервності рідини, рівняння теплопровідності та скориставшись наближенням Бусінеска, можна отримати рівняння руху рідини у такій формі: де — функція потоку рідини (, , — поле швидкостей), — відхилення температури рідини від її критичного значення, за якого зникає конвекція. Параметри позначають, відповідно, прискорення вільного падіння, коефіцієнт теплового розширення, кінематичну в'язкість рідини та її теплопровідність. Як було встановлено Релеєм, у такій системі можуть утворюватися конвекційні вали (ізотропні в напрямку осі OY), у яких відбувається коловорот рідини: тепліша рідина піднімається нагору, а холодніша опускається донизу. Конвекційні вали ділять площину XZ на приблизно однакові комірки. Згідно з ідеями Релея[3] та Зальцмана[4], можна розкласти поля та в ряд Фур'є по та і обмежитись лише першими членами розкладу: де — число Релея, , параметр задає співвідношення вертикального та горизонтального розмірів комірок, що утворюються в результаті конквекції, а змінні залежать лише від часу. Після переходу до безрозмірного часу шляхом заміни отримується система трьох звичайних диференціальних рівнянь, що носить назву рівнянь Лоренца: де точка означає диференціювання за часом, — число Прандтля, та . Динамічні змінні , та описують відповідно інтенсивність конвективного руху, різницю температур висхідного та низхідного потоків рідини та відхилення вертикального розподілу температури від лінійного режиму. Стаціонарні точкиАналіз властивостей стаціонарних точок системи зручно робити, змінюючи параметр :
ТраєкторіїФазові траєкторії, що починаються в будь-якій точці, спочатку, здавалося б, притягаються до однієї зі стаціонарних точок, але не можуть підійти надто близько, оскільки стаціонарна точка нестійка. У якийсь момент фазова траєкторія перестрибує в окіл іншої стаціонарної точки, але там теж не може затриматися, й знову перестрибує до першої стаціонарної точки. Як наслідок, система безупинно аперіодично перестрибує від однієї точки до іншої. Фазові траєкторії чутливі до щонайменшої зміни початкових умов. Дві нескінченно близькі початкові точки в фазовому просторі з часом розходяться.
У 1983 році Грассбергер та Прокаччія оцінили[5] розмірність Гаусдорфа дивного атрактора Лоренца й одержали величину 2.06 ± 0.01. При дуже великих значеннях , динаміка системи Лоренца описується звичайними граничними циклами. Зокрема, при утворюється граничний цикл, що має вигляд вузлового тора . При зменшенні перехід до хаотичного режиму відбувається чарез каскад біфуркацій подвоєння періоду. Водночас фазові траєкторії не можуть втекти на нескінченність, оскільки при великих X, Y, Z виникають сили, що повертають фазові траєкторії в область малих значень змінних. Якщо домножити перше рівняння Лоренца на , друге — на , а третє — на , а потім додати всі три рівняння, то результат можна записати як: Поверхня, що задається нерівністю , має вигляд еліпсоїда зі зміщеним центром мас. Нескладно здогадатися, що за будь-якого вибору початкових умов еволюція системи на атракторі не призведе до виходу за межі одного з таких еліпсоїдів. Квазіперіодичних коливань в системі Лоренца не може бути за жодних умов. Програми, які моделюють поведінку системи рівнянь ЛоренцаMatlab% Solve over time interval [0,100] with initial conditions [1,1,1]
% ''f'' is set of differential equations
% ''a'' is array containing x, y, and z variables
% ''t'' is time variable
sigma = 10;
beta = 8/3;
rho = 28;
f = @(t,a) [-sigma*a(1) + sigma*a(2); rho*a(1) - a(2) - a(1)*a(3); -beta*a(3) + a(1)*a(2)];
[t,a] = ode45(f,[0 100],[1 1 1]); % Runge-Kutta 4th/5th order ODE solver
plot3(a(:,1),a(:,2),a(:,3))
Borland C#include <graphics.h>
#include <conio.h>
void main()
{
double x = 3.051522, y = 1.582542, z = 15.62388, x1, y1, z1;
double dt = 0.0001;
int a = 5, b = 15, c = 1;
int gd=DETECT, gm;
initgraph(&gd, &gm, "C:\\BORLANDC\\BGI");
do {
x1 = x + a*(-x+y)*dt;
y1 = y + (b*x-y-z*x)*dt;
z1 = z + (-c*z+x*y)*dt;
x = x1; y = y1; z = z1;
putpixel((int)(19.3*(y - x*0.292893) + 320),
(int)(-11*(z + x*0.292893) + 392), 9);
} while (!kbhit());
closegraph();
}
Borland PascalProgram Lorenz;
Uses CRT, Graph;
Const
x: Real = 3.051522;
y: Real = 1.582542;
z: Real = 15.62388;
dt = 0.0001;
a = 5;
b = 15;
c = 1;
Var
gd, gm: Integer;
x1, y1, z1: Real;
Begin
gd:=Detect;
InitGraph(gd, gm, 'c:\bp\bgi');
While not KeyPressed Do Begin
x1 := x + a*(-x+y)*dt;
y1 := y + (b*x-y-z*x)*dt;
z1 := z + (-c*z+x*y)*dt;
x := x1;
y := y1;
z := z1;
PutPixel(Round(19.3*(y - x*0.292893) + 320),
Round(-11*(z + x*0.292893) + 392), 9);
End;
CloseGraph;
ReadKey;
End.
Pythonimport numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
from mpl_toolkits.mplot3d import Axes3D
rho = 28.0
sigma = 10.0
beta = 8.0 / 3.0
def f(state, t):
x, y, z = state # Unpack the state vector
return sigma * (y - x), x * (rho - z) - y, x * y - beta * z # Derivatives
state0 = [1.0, 1.0, 1.0]
t = np.arange(0.0, 40.0, 0.01)
states = odeint(f, state0, t)
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot(states[:, 0], states[:, 1], states[:, 2])
plt.show()
Fortranprogram LorenzSystem
real,parameter::sigma=10
real,parameter::r=28
real,parameter::b=2.666666
real,parameter::dt=.01
integer,parameter::n=1000
real x,y,z
open(1,file='result.txt',form='formatted',status='replace',action='write')
x=10.;y=10.;z=10.
do i=1,n,1
x1=x+sigma*(y-x)*dt
y1=y+(r*x-x*z-y)*dt
z1=z+(x*y-b*z)*dt
x=x1
y=y1
z=z1
write(1,*)x,y,z
enddo
print *,'Done'
close(1)
end program LorenzSystem
Mathematicadata = Table[
With[{N = 1000, dt = 0.01, a = 5, b = 1 + j, c = 1},
NestList[Module[{x, y, z, x1, y1, z1},
{x, y, z} = #;
x1 = x + a (-x + y) dt;
y1 = y + (b x - y - z x) dt;
z1 = z + (-c z + x y) dt;
{x1, y1, z1}] &,
{3.051522, 1.582542, 15.62388}, N
]
],
{j, 0, 5}];
Graphics3D@MapIndexed[{Hue[0.1 First[#2]], Point[#1]} &, data]
QBASIC / FreeBASIC («fbc -lang qb»)DIM x, y, z, dt, x1, y1, z1 AS SINGLE
DIM a, b, c AS INTEGER
x = 3.051522: y = 1.582542: z = 15.62388: dt = 0.0001
a = 5: b = 15: c = 1
SCREEN 12
PRINT "Press Esc to quit"
WHILE INKEY$ <> CHR$(27)
x1 = x + a * (-x + y) * dt
y1 = y + (b * x - y - z * x) * dt
z1 = z + (-c * z + x * y) * dt
x = x1
y = y1
z = z1
PSET ((19.3 * (y - x * .292893) + 300), (-11 * (z + x * .292893) + 360)), 9
WEND
END
Посилання в тексті
Джерела
|