vak: (Default)
[personal profile] vak
Аттрактор Лоренца был впервые изучен Эдом Н. Лоренцом, метеорологом, около 1963 года. Он был получен из упрощенной модели конвекции в атмосфере Земли. Он также естественным образом возникает в моделях лазеров и динамо. Система чаще всего выражается как 3 связанных нелинейных дифференциальных уравнения.
∂x/∂t = A·(y − x)
∂y/∂t = x·(B − z) − y
∂z/∂t = x·y − C·z
Один из часто используемых наборов констант: A = 10, B = 28, C = 8/3.

Процесс не образует предельных циклов и никогда не достигает устойчивого состояния. Вместо этого он является примером детерминированного хаоса. Как и другие хаотические системы, система Лоренца чувствительна к начальным условиям. Два начальных состояния, как бы близко они ни находились, обычно рано или поздно разойдутся.

Типичная трасса каждой координаты показана на рисунке.



Вот текст программы на Си, воспроизводящей этот аттрактор. Печатаем триста шагов.
#include "stdio.h"

int main()
{
const int N = 300;
const double H = 0.01;
const double A = 10.0;
const double B = 28.0;
const double C = 8.0 / 3.0;

double x = 0.1;
double y = 0;
double z = 0;

for (int i = 0; i < N; i++) {
double x_next = x + H * A * (y - x);
double y_next = y + H * (x * (B - z) - y);
double z_next = z + H * (x * y - C * z);
x = x_next;
y = y_next;
z = z_next;
printf("%d %g %g %g\n", i, x, y, z);
}
}
Компилируем, запускаем.
$ cc lorenz-real.c -o lorenz-real
$ ./lorenz-real
...
297 -12.4511 -9.23727 35.4193
298 -12.1297 -8.22112 35.6249
299 -11.7388 -7.21403 35.6721
Если Вы думаете, что хаос возможен только с вещественными числами - смею вас разуверить. Переделаем программу на целые.
#include "stdio.h"

int main()
{
const int N = 300;
const long long K = 100000000;
const long long RH = 100;
const long long A = 10;
const long long B = 28;
const long long CN = 8;
const long long CD = 3;

long long x = K / 10;
long long y = 0;
long long z = 0;

for (int i = 0; i < N; i++) {
long long x_next = x + A * (y - x) / RH;
long long y_next = y + (x * (B*K - z) - y*K) / RH / K;
long long z_next = z + (x * y - CN * z * K / CD) / RH / K;
x = x_next;
y = y_next;
z = z_next;
printf("%d %g %g %g\n", i, (double)x/K, (double)y/K, (double)z/K);
}
}
Запускаем.
$ cc lorenz-integer.c -o lorenz-integer
$ ./lorenz-integer
...
297 -12.4511 -9.23727 35.4193
298 -12.1297 -8.22112 35.6249
299 -11.7388 -7.21403 35.6721
Выходит ровно то же самое. Дело не в числах, а в природе реальности. Здесь математика переходит в физику. Многие процессы вокруг нас, кажущиеся случайными, на самом деле лоренцовы аттракторы, развивающиеся по чётко определённым правилам.

Date: 2024-12-05 00:04 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
И с целыми! Фигасе.

Date: 2024-12-05 00:26 (UTC)
juan_gandhi: (Default)
From: [personal profile] juan_gandhi
О, и это тоже... немножко напоминает. Потому что пошагово-то всё близко, и автокорреляция тут высокая же.

Date: 2024-12-05 06:59 (UTC)
prool: cat (Default)
From: [personal profile] prool
Вспоминается муравей Лангтона

Date: 2024-12-06 14:48 (UTC)
From: [personal profile] ymz5
Звісно ж, одразу пригадався "Парк Юрського періоду" (книга) і монологи доктора Малкольма :-)