Великий аттрактор
- 1 year ago
- 0
- 0
Аттрактор Лоренца (от англ. to attract — притягивать) ― странный аттрактор , впервые найденный Э. Н. Лоренцем в нелинейной системе обыкновенных дифференциальных уравнений
при следующих значениях параметров: σ=10, r =28, b =8/3. Эта система вначале была введена как первое нетривиальное галёркинское приближение для задачи о конвекции морской воды в плоском слое, чем и мотивировался выбор значений σ, r и b , но она возникает также и в других физических вопросах и моделях:
Исходная гидродинамическая система уравнений:
где — скорость течения, — температура жидкости, — температура верхней границы (на нижней поддерживается ), — плотность, — давление, — сила тяжести, — соответственно коэффициент теплового расширения , коэффициент температуропроводности и кинематической вязкости .
В задаче о конвекции модель возникает при разложении скорости течения и температуры в двумерные ряды Фурье и последующей их «обрезки» с точностью до первых-вторых гармоник. Кроме того, приведённая полная система уравнений гидродинамики записывается в приближении Буссинеска . Обрезка рядов в определённой мере оправдана, так как Сольцмен в своих работах продемонстрировал отсутствие каких-либо интересных особенностей в поведении большинства гармоник .
Обозначим физический смысл переменных и параметров в системе уравнений применительно к упомянутым задачам.
Стоит указать, что применительно к задаче о конвекции модель Лоренца является очень грубым приближением, весьма далёким от реальности. Более-менее адекватное соответствие существует в области регулярных режимов, где устойчивые решения качественно отображают экспериментально наблюдаемую картину равномерно вращающихся конвективных валов ( Ячейки Бенара ). Хаотический режим, присущий модели, не описывает турбулентной конвекции в силу существенной обрезки исходных тригонометрических рядов.
Интересным является существенно большая точность модели при некоторой её модификации, применяемая в частности для описания конвекции в слое, подвергаемом вибрации в вертикальном направлении либо переменному тепловому воздействию. Такие изменения внешних условий приводят к модулированию коэффициентов в уравнениях. При этом высокочастотные Фурье-компоненты температуры и скорости существенно подавляются, улучшая соответствие модели Лоренца и реальной системы.
Примечательно везение Лоренца при выборе значения параметра , так как система приходит к странному аттрактору только при значениях, больших 24,74, при меньших поведение оказывается совершенно иным.
Рассмотрим изменения в поведении решения системы Лоренца при различных значениях параметра r. На иллюстрациях к статье приведены результаты численного моделирования для точек с начальными координатами (10,10,10) и (-10,-10,10). Моделирование производилось с помощью приведённой ниже программы, написанной на языке Фортран , построение графиков по полученным таблицам — из-за слабых графических возможностей Фортрана с помощью Compaq Array Viewer.
Эти точки определяют состояния стационарного режима конвекции, когда в слое формируется структура из вращающихся валов жидкости.
При больших значениях параметра траектория претерпевает серьезные изменения. Шильников и Каплан показали, что при очень больших r система переходит в режим автоколебаний, при этом, если уменьшать параметр, будет наблюдаться переход к хаосу через последовательность удвоений периода колебаний.
Модель Лоренца является реальным физическим примером динамических систем с хаотическим поведением, в отличие от различных искусственно сконструированных отображений ( , , преобразование пекаря , отображение Фейгенбаума и др.).
Из-за своей характерной формы аттрактор получил название «бабочка Лоренца», что породило понятие « эффект бабочки » в теории хаоса , впоследствии ошибочно связанное в массовом сознании с известным рассказом Рэя Брэдбери .
#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();
}
data = 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]
<html>
<body>
<canvas height='500' width='500' id='cnv'></canvas>
<script>
var cnv = document.getElementById("cnv");
var cx = cnv.getContext('2d');
var x = 3.051522, y = 1.582542, z = 15.62388, x1, y1, z1;
var dt = 0.0001;
var a = 5, b = 15, c = 1;
var h = parseInt(cnv.getAttribute("height"));
var w = parseInt(cnv.getAttribute("width"));
var id = cx.createImageData(w, h);
var rd = Math.round;
var idx = 0;
i=1000000; while (i--) {
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;
idx=4*(rd(19.3*(y - x*0.292893) + 320) + rd(-11*(z + x*0.292893) + 392)*w);
id.data[idx+3] = 255;
}
cx.putImageData(id, 0, 0);
</script>
</body>
</html>
%Solution for the Lorenz equations in the time interval [0,100] with initial conditions [1,1,1].
clear all
clc
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)];
%'f' is the set of differential equations and 'a' is an array containing values of x,y, and z variables.
%'t' is the time variable
[t,a] = ode45(f,[0 100],[1 1 1]);%'ode45' uses adaptive Runge-Kutta method of 4th and 5th order to solve differential equations
plot3(a(:,1),a(:,2),a(:,3)) %'plot3' is the command to make 3D plot
--> load(dynamics)$
[sigma, r,b]: [10,28,8/3]$
eq: [sigma*(y-x), x*(r-z)-y, x*y-b*z]$
init: [1.0,0,0]$
t_range: [t,0,50,0.01]$
sol: rk(eq, [x, y,z], init, t_range)$
len: length(sol)$
t: makelist(sol[k][1], k,1,len)$
x: makelist(sol[k][2], k,1,len)$
y: makelist(sol[k][3], k,1,len)$
z: makelist(sol[k][4], k,1,len)$
plot2d([discrete, t,x])$
--> load(draw)$
draw3d(point_size=0.01, points_joined=true,
point_type=filled_circle,points(x,y,z)
)$
"""
================
Lorenz Attractor
================
"""
import numpy as np
import matplotlib.pyplot as plt
def lorenz(x, y, z, s=10, r=28, b=2.667):
'''
Given:
x, y, z: a point of interest in three dimensional space
s, r, b: parameters defining the lorenz attractor
Returns:
x_dot, y_dot, z_dot: values of the lorenz attractor's partial
derivatives at the point x, y, z
'''
x_dot = s*(y - x)
y_dot = r*x - y - x*z
z_dot = x*y - b*z
return x_dot, y_dot, z_dot
dt = 0.01
num_steps = 10000
# Need one more for the initial values
xs = np.empty(num_steps + 1)
ys = np.empty(num_steps + 1)
zs = np.empty(num_steps + 1)
# Set initial values
xs[0], ys[0], zs[0] = (0., 1., 1.05)
# Step through "time", calculating the partial derivatives at the current point
# and using them to estimate the next point
for i in range(num_steps):
x_dot, y_dot, z_dot = lorenz(xs[i], ys[i], zs[i])
xs[i + 1] = xs[i] + (x_dot * dt)
ys[i + 1] = ys[i] + (y_dot * dt)
zs[i + 1] = zs[i] + (z_dot * dt)
# Plot
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.plot(xs, ys, zs, lw=0.5)
ax.set_xlabel("X Axis")
ax.set_ylabel("Y Axis")
ax.set_zlabel("Z Axis")
ax.set_title("Lorenz Attractor")
plt.savefig('Lorenz Attractor')
plt.show()
{{
cite journal
}}
:
Недопустимый
|ref=harv
(
справка
)