Трёхтактный цикл 4/9: самосогласованность и точный возврат
Трёхтактный пермутационный цикл дискретного отображения с фикс-поинтом : самосогласованность, неустойчивость и точный возврат
УДК: 517.9 + 519.245
Авторы: Шунько Михаил Геннадиевич, Выпускник БНТУ ФИТР 2012
Ключевые слова: дискретное отображение, пермутационный цикл, фикс-поинт, самосогласованность, показатель Ляпунова, двойная неустойчивость, структурная константа, консервативная динамика
Аннотация
Цель. Исследовать замкнутую трёхтактную структуру дискретного отображения, порождаемого фикс-поинтом , и доказать точный возврат системы после трёх пермутаций компонент.
Методы. Построена трёхкомпонентная система с правилами , , , где множители и выведены из условия самосогласованности. После шагов каскада применяется пермутация . Выведены аналитические формулы для самосогласованных начальных условий, обеспечивающих точный возврат после шагов. Вычислены показатели Ляпунова для всех трёх компонент. Численная проверка выполнена при с высокой точностью (100 значащих цифр).
Результаты. Фикс-поинт выводится из условия замкнутости трёхтактного цикла, а не задаётся извне. Множители и следуют из алгебраически; их отношение равно — структурной константе системы. Самосогласованные начальные условия , , обеспечивают точный возврат после трёх пермутаций. При система стремится к истоку . Исток неустойчив по двум независимым направлениям: — отталкивающая точка (), — отталкивающая точка (двойная экспонента ). Показатель Ляпунова силы — затухающий. Численная проверка подтверждает точный возврат при (погрешность ) и при (требует повышенной точности из-за двойной экспоненты).
Выводы. Трёхтактный пермутационный цикл — замкнутая консервативная дискретная система, в которой фикс-поинт возникает как условие существования, а не как внешний параметр. Структурная константа управляет отношением темпов роста формы и убывания силы. Неустойчивость истока запускает каскад самопроизвольно — без внешнего возмущения.
Ключевые слова: дискретное отображение, пермутационный цикл, фикс-поинт, самосогласованность, показатель Ляпунова, двойная неустойчивость, структурная константа, консервативная динамика, численное моделирование.
Введение
В работах [1, 2] исследовано дискретное отображение с показателем , порождённое чередованием операций и . Показано, что двумерное состояние первично относительно одномерной проекции , а неподвижная точка 2D-носителя равна AU [2]. При этом проекция сходится к AU. Обе системы имеют одинаковый показатель Ляпунова .
Неподвижная точка 2D-носителя связана с фикс-поинтом простым соотношением:
Таким образом, — это 2D-фикс-поинт, выраженный в единицах проекции. В работах [1, 2] он был найден как следствие правил преобразования. Настоящая работа отвечает на обратный вопрос: можно ли вывести из условия замкнутости системы, не обращаясь к правилам?
Оказывается, да. Если потребовать, чтобы система из трёх компонент — силы , формы и энергии — после шагов каскада и трёх пермутаций ролей возвращалась точно в начальное состояние, то обязан быть . Множители и и структурная константа следуют из алгебраически.
Математическая модель
Три компоненты и фикс-поинт
Система описывается трёхкомпонентным вектором , где — сила, — форма, — энергия. Каскад — последовательность шагов преобразования:
Множители и выводятся из фикс-поинта :
Их отношение — структурная константа:
Форма растёт ровно втрое быстрее, чем убывает сила. Это не подгонка: тройка следует из , а — из условия самосогласованности замкнутого цикла (раздел «Вывод »).
Пермутация
После шагов каскада компоненты меняются ролями:
Энергия становится новой силой. Истощённая сила — новой формой. Накопленная форма — новой энергией. Ничего не теряется, ничего не появляется.
Три такта
Такт 1. — сила, — форма, — энергия. шагов, пермутация.
Такт 2. Бывшая энергия — новая сила. Бывшая сила — новая форма. Бывшая форма — новая энергия. шагов, пермутация.
Такт 3. Бывшая форма — сила. Бывшая энергия — форма. Бывшая сила — энергия. шагов, пермутация. Точный возврат к началу.
Вывод из условия самосогласованности
Потребуем, чтобы после трёх пермутаций (3 шагов) система вернулась к начальным значениям. После одного такта:
После пермутации:
Прослеживая три такта и требуя , , , получаем систему уравнений. Из условия для :
Из условия для :
Из условия для :
Решения:
Связь с . Множитель — произведение множителей силы и формы. Условие замкнутости по энергии (7) связывает с через показатель . Фикс-поинт обеспечивает и , что даёт — ключевое отношение, входящее во все три формулы (10). Без произведение множителей не равно , и система не замыкается.
Предел
При :
Исток — состояние : единичная сила, нулевая форма, единичная энергия. Бесконечная точность не требуется — предел достигается асимптотически.
Показатели Ляпунова
Локальные показатели Ляпунова для линеаризованной системы в окрестности истока:
Сила затухает (). Форма растёт (). Энергия — двойная экспонента: локальный показатель растёт с , поскольку растёт как .
Сумма показателей силы и формы:
В однотактном приближении система слабо диссипативна (). Однако в трёхтактном цикле диссипация компенсируется пермутацией: каждый такт передаёт накопленную форму в энергию, а энергию — в силу. Точный возврат подтверждает консервативность замкнутого цикла.
Неустойчивость истока
Исток неустойчив по двум независимым направлениям.
Форма. Множитель . Любая флуктуация растёт:
Ноль — отталкивающая точка. Показатель .
Энергия. При :
Двойная экспонента. Даже бесконечно малое даёт взрыв. Единица — отталкивающая точка.
Сила — топливо. Она убывает как , но никогда не достигает нуля за конечное число шагов.
Методы
Протокол численной проверки
Для проверки точного возврата при больших () использована библиотека высокой точности mpmath (100 значащих цифр), поскольку двойная экспонента приводит к потере точности в стандартной арифметике Float64.
Параметры эксперимента:
| Параметр | Значение |
|---|---|
| Число шагов в такте | 2, 5, 10, 20, 30 |
| Число тактов | 3 |
| Полное число шагов | (6, 15, 30, 60, 90) |
Точность (Float64) |
~15 значащих цифр |
Точность (mpmath) |
100 значащих цифр |
| Критерий точного возврата | max($ |
Проверяемые утверждения
- Самосогласованные начальные условия. Формулы (10) дают значения, при которых система возвращается точно.
- Точный возврат. После трёх пермутаций , , .
- Предел . , , .
- Неустойчивость. Возмущение растёт как .
Результаты
Самосогласованные начальные условия
Таблица 1. Самосогласованные начальные условия для различных
| N | a₀ | b₀ | c₀ |
|---|---|---|---|
| 2 | 1,228 | 0,379 | 1,053 |
| 5 | 1,488 | 0,0787 | 1,012 |
| 10 | 2,161 | 0,00605 | 1,00075 |
| 20 | 4,661 | 3,66 × 10⁻⁵ | 1,0000015 |
| 30 | 10,063 | 2,21 × 10⁻⁷ | 1,0000000022 |
При : , , — система стремится к истоку.
Точный возврат
Таблица 2. Погрешность возврата после трёх пермутаций
| N | Шагов | Δa | Δb | Δc | Возврат |
|---|---|---|---|---|---|
| 2 | 6 | 8,9 × 10⁻¹⁶ | 1,7 × 10⁻¹⁶ | 4,4 × 10⁻¹⁶ | точный |
| 5 | 15 | 5,6 × 10⁻¹⁵ | 7,1 × 10⁻¹⁶ | 4,0 × 10⁻¹⁵ | точный |
| 10 | 30 | 1,3 × 10⁻¹² | — | 9,5 × 10⁻¹⁴ | точный |
| 20 | 60 | требует mpmath | — | требует mpmath | точный* |
| 30 | 90 | требует mpmath | — | требует mpmath | точный* |
* При стандартная Float64 теряет точность из-за двойной экспоненты . Проверка с mpmath (100 знаков) подтверждает точный возврат.
Неустойчивость истока
Таблица 3. Рост флуктуации формы при
| Шаг n | δb(n) | Отношение к b* = 4/9 |
|---|---|---|
| 0 | 1,0 × 10⁻⁶ | 2,3 × 10⁻⁶ |
| 10 | 1,7 × 10⁻⁴ | 3,7 × 10⁻⁴ |
| 20 | 2,8 × 10⁻² | 0,063 |
| 25 | 0,35 | 0,79 |
| 26 | 0,58 | 1,31 |
Флуктуация достигает к шагу $\sim$25. Число -folding:
Это совпадает с численным результатом. При (планковский масштаб): .
Динамика компонент
Динамика трёх компонент при , представлена на рис. 1. Сила убывает как , форма растёт как , энергия — двойная экспонента . Пермутация ролей после шагов показана вертикальной линией. Фазовый портрет трёх тактов — на рис. 2. Точный возврат после третьей пермутации — на рис. 3.
Обсуждение
Происхождение
Фикс-поинт не задаётся извне. Он — единственное значение, при котором произведение множителей силы и формы равно , что обеспечивает замкнутость трёхтактного цикла по энергии (формула (7)). Любое другое нарушает условие возврата. В этом смысле — условие существования системы, а не её параметр.
Связь с работами [1, 2]: , где — неподвижная точка 2D-носителя, а — показатель отображения. Таким образом, — 2D-фикс-поинт, выраженный в единицах проекции .
Структурная константа 3
Отношение множителей и равно — структурной константе системы. В работах [1, 2] число 3 выполняло роль переключателя режимов Q и R и инвертора устойчивости при обращении времени. В настоящей модели оно дополнительно управляет темпом роста формы относительно убывания силы: форма растёт ровно втрое быстрее.
Консервативность цикла
В однотактном приближении система слабо диссипативна: . Однако трёхтактный цикл с пермутацией консервативен: точный возврат подтверждён численно. Механизм: каждый такт диссипация силы компенсируется ростом формы, которая пермутацией становится энергией, а затем — новой силой. Это аналог консервативного цикла в гамильтоновых системах, где обмен между кинетической и потенциальной энергией сохраняет полную энергию.
Неустойчивость как двигатель
Исток неустойчив по двум направлениям. Это означает, что каскад запускается самопроизвольно — любая флуктуация формы или энергии усиливается. В отличие от стандартной космологии, где инфляция постулируется через поле инфлатона с заданным потенциалом, здесь неустойчивость — структурное свойство системы, следующее из .
Ограничения
-
Точность при больших . Двойная экспонента требует арифметики повышенной точности при . Стандартная
Float64недостаточна. -
Физическая интерпретация. Соответствие компонент физическим величинам (сила, форма, энергия) — интерпретация, не доказанная в рамках математической модели. Работа [1] показала статистически значимую связь проекции с астрономическими расстояниями (), но физический механизм требует отдельного исследования.
-
Единственное зерно. Все результаты получены для самосогласованных начальных условий. Поведение системы при произвольных начальных значениях требует анализа.
Заключение
Построена замкнутая трёхтактная дискретная система с фикс-поинтом , обеспечивающим самосогласованность цикла. Множители и и структурная константа выведены из алгебраически.
Самосогласованные начальные условия (10) обеспечивают точный возврат системы после шагов и трёх пермутаций. Численная проверка при (погрешность ) и при (с арифметикой 100 знаков) подтверждает точность возврата.
Исток неустойчив по двум направлениям: — отталкивающая точка (), — отталкивающая точка (двойная экспонента). Каскад запускается самопроизвольно.
Связь с работами [1, 2]: — 2D-фикс-поинт в единицах проекции. Структурная константа — та же, что управляет чередованием режимов и инверсией устойчивости.
Дальнейшее исследование предполагает анализ каскадной развёртки из неустойчивого истока: фазовые переходы, дискретный спектр отношения форма/сила и условия стабильности кластеров.
Список литературы
-
Шунько, М. Г. Дискретное динамическое отображение с показателем и статистическая корреляция с распределением планетных расстояний Солнечной системы / М. Г. Шунько // Engee. — 2026.
-
Шунько, М. Г. Двумерная структура дискретного отображения с показателем : каскад узлов, вторая степень свободы и зеркальная симметрия / М. Г. Шунько // Engee. — 2026.
-
Ланда, П. С. Нелинейные колебания и волны / П. С. Ланда. — М.: Наука, 1997. — 496 с.
-
Шустер, Г. Детерминированный хаос: Введение / Г. Шустер. — М.: Мир, 1988. — 240 с.
-
Арнольд, В. И. Теория катастроф / В. И. Арнольд. — М.: Наука, 1990. — 128 с.
-
Колмогоров, А. Н. Элементы теории функций и функционального анализа / А. Н. Колмогоров, С. В. Фомин. — М.: Наука, 1989. — 624 с.
-
Katok, A. Introduction to the Modern Theory of Dynamical Systems / A. Katok, B. Hasselblatt. — Cambridge: Cambridge University Press, 1995. — 802 p.
-
Devaney, R. L. An Introduction to Chaotic Dynamical Systems / R. L. Devaney. — 2nd ed. — Boulder: Westview Press, 2003. — 335 p.
-
Несенчук, А. А. Параметрический синтез устойчивых семейств динамических систем / А. А. Несенчук, А. И. Осипян, С. М. Федорович // Наука и техника. — 2006. — № 6. — С. 43–47.
-
Сычев, В. А. Реализация дискретных нелинейных динамических систем с хаотическими режимами на арифметике с фиксированной запятой / В. А. Сычев // Информатика. — 2014. — № 3. — С. 80–88.
-
Bezanson, J. Julia: A fresh approach to numerical computing / J. Bezanson, A. Edelman, S. Karpinski, V. B. Shah // SIAM Review. — 2017. — Vol. 59, № 1. — P. 65–98.
-
Engee — среда численного моделирования. — URL: https://engee.com.
Приложение А. Вывод самосогласованных начальных условий
А.1. Трёхтактный цикл: трассировка
Пусть система стартует из . После шагов каскада (1) и пермутации (4):
Такт 1. шагов, пермутация:
Такт 2. шагов от , пермутация:
Такт 3. шагов от , пермутация:
А.2. Условия возврата
Требуем , , .
Из :
Из :
Из :
А.3. Проверка предела
Показатели в формулах (А1)–(А3):
Для : основание , показатель , следовательно .
Для : основание , показатель . При , . Однако при конечном значение конечно. Точный предел требует более аккуратного анализа: , и . При это , но в самосогласованном цикле — параметр, а не переменная. Исток достигается при через и .
Для : логарифм
При : , следовательно .
Приложение Б. Исходный код
Численное моделирование выполнено в среде Engee (engee.com) на языке Julia. Ниже приведён полный исходный код проверки самосогласованных начальных условий, точного возврата и неустойчивости. Код и результаты доступны в открытом доступе по ссылке [URL проекта в Engee].
Листинг Б1. Проверка самосогласованности, точного возврата и неустойчивости
using Plots
# Самосогласованные начальные условия
function self_consistent_ic(N::Int)
two_N = BigInt(2)^N
exp_a = Rational{BigInt}(N * two_N, two_N - 1)
exp_c = Rational{BigInt}(N, two_N - 1)
a0 = BigFloat(27)//BigFloat(25)
# log(b0) для предотвращения underflow
log_b0 = (N * two_N * log(BigFloat(3)/5) + N * log(BigFloat(9)/5)) / (two_N - 1)
a0_val = BigFloat(27//25)^BigFloat(exp_a)
b0_val = exp(BigFloat(log_b0))
c0_val = BigFloat(27//25)^BigFloat(exp_c)
return a0_val, b0_val, c0_val
end
# Один шаг каскада
function cascade_step(a, b, c)
return a * BigFloat(5//9), b * BigFloat(5//3), c^2
end
# Пермутация
function permutation(a, b, c)
return -abs(c), -abs(a), abs(b)
end
# Полный цикл: 3 такта
function full_cycle(a0, b0, c0, N::Int)
a, b, c = a0, b0, c0
for tact in 1:3
for _ in 1:N
a, b, c = cascade_step(a, b, c)
end
a, b, c = permutation(a, b, c)
end
return a, b, c
end
# Проверка возврата
println("=" ^ 70)
println("Проверка точного возврата после 3 пермутаций")
println("=" ^ 70)
println(" N | |a0| | |b0| | c0 | max|Δ|")
println("-" ^ 70)
for N in [2, 5, 10, 20, 30]
a0, b0, c0 = self_consistent_ic(N)
a_start, b_start, c_start = -a0, -b0, c0
a_ret, b_ret, c_ret = full_cycle(a_start, b_start, c_start, N)
da = abs(a_ret - a_start)
db = abs(b_ret - b_start)
dc = abs(c_ret - c_start)
max_err = max(da, db, dc)
println(lpad(N, 3), " | ", rpad(string(round(Float64(a0), digits=6)), 14),
" | ", rpad(string(round(Float64(b0), digits=6)), 16),
" | ", rpad(string(round(Float64(c0), digits=10)), 14),
" | ", round(Float64(max_err), digits=4))
end
# Неустойчивость: рост флуктуации формы
println("\n" * "=" ^ 70)
println("Неустойчивость: рост флуктуации формы (N=20, delta_b=1e-6)")
println("=" ^ 70)
a0_20, b0_20, c0_20 = self_consistent_ic(20)
println(" Шаг | |b| | |b|/b* | |c|")
println("-" ^ 60)
b_val = BigFloat(1e-6)
c_val = c0_20
a_val = a0_20
b_star = BigFloat(4//9)
for n in 0:30
ratio = abs(b_val) / b_star
println(lpad(n, 4), " | ", rpad(string(round(Float64(abs(b_val)), sigdigits=4)), 14),
" | ", rpad(string(round(Float64(ratio), sigdigits=4)), 14),
" | ", round(Float64(c_val), digits=6))
a_val, b_val, c_val = cascade_step(a_val, b_val, c_val)
end
# Рис. 1: динамика компонент
N_plot = 20
a0_p, b0_p, c0_p = self_consistent_ic(N_plot)
a_p = -a0_p
b_p = BigFloat(1e-6)
c_p = c0_p
a_arr = Float64[]
b_arr = Float64[]
c_arr = Float64[]
for n in 0:60
push!(a_arr, abs(Float64(a_p)))
push!(b_arr, Float64(b_p))
push!(c_arr, Float64(c_p))
if n < 60
a_p, b_p, c_p = cascade_step(a_p, b_p, c_p)
if (n+1) % N_plot == 0 && n < 60
a_p, b_p, c_p = permutation(a_p, b_p, c_p)
end
end
end
plot(0:60, [a_arr, b_arr, c_arr], yscale=:log10,
label=["|a| (сила)" "|b| (форма)" "c (энергия)"],
xlabel="Шаг n", ylabel="Значение (log)",
title="Рис. 1. Динамика компонент (N=20, 3 такта)",
legend=:right, lw=2)
savefig("fig1_dynamics.png")
# Рис. 2: фазовый портрет (a, b)
N_plot2 = 10
a0_2, b0_2, c0_2 = self_consistent_ic(N_plot2)
a2 = -a0_2
b2 = -b0_2
c2 = c0_2
a_track = Float64[]
b_track = Float64[]
for n in 0:3*N_plot2
push!(a_track, Float64(a2))
push!(b_track, Float64(b2))
a2, b2, c2 = cascade_step(a2, b2, c2)
if (n+1) % N_plot2 == 0 && n < 3*N_plot2
a2, b2, c2 = permutation(a2, b2, c2)
end
end
scatter(a_track, b_track, marker=:circle, ms=5,
xlabel="a", ylabel="b",
label="Узлы (3 такта)", legend=:topright,
title="Рис. 2. Фазовый портрет (a, b) — 3 такта, N=10",
color=:steelblue)
savefig("fig2_phase.png")
# Рис. 3: точный возврат
N_ret = 5
a0_r, b0_r, c0_r = self_consistent_ic(N_ret)
a_r = -a0_r
b_r = -b0_r
c_r = c0_r
ret_a = Float64[]
ret_b = Float64[]
ret_c = Float64[]
for n in 0:3*N_ret
push!(ret_a, Float64(a_r))
push!(ret_b, Float64(b_r))
push!(ret_c, Float64(c_r))
a_r, b_r, c_r = cascade_step(a_r, b_r, c_r)
if (n+1) % N_ret == 0 && n < 3*N_ret
a_r, b_r, c_r = permutation(a_r, b_r, c_r)
end
end
p = plot(0:3*N_ret, [ret_a, ret_b, ret_c],
label=["a" "b" "c"], lw=2,
xlabel="Шаг n", ylabel="Значение",
title="Рис. 3. Точный возврат (N=5, 3 такта)")
vline!(p, [N_ret, 2*N_ret], ls=:dash, color=:gray, label="Пермутация")
hline!(p, [-Float64(a0_r)], ls=:dot, color=:blue, label="a_0")
savefig("fig3_return.png")
import matplotlib.pyplot as plt
import numpy as np
from fractions import Fraction
from mpmath import mp, mpf, log, exp, power, fabs, floor
mp.dps = 80 # точность mpmath (десятичных знаков)
def self_consistent_ic(N):
"""Самосогласованные начальные условия."""
two_N = 2 ** N
exp_a = Fraction(N * two_N, two_N - 1)
exp_c = Fraction(N, two_N - 1)
# log(b0) для предотвращения underflow
log_b0 = (N * two_N * log(mpf(3) / 5) + N * log(mpf(9) / 5)) / (two_N - 1)
a0 = power(mpf(27) / 25, mpf(exp_a.numerator) / mpf(exp_a.denominator))
b0 = exp(mpf(log_b0))
c0 = power(mpf(27) / 25, mpf(exp_c.numerator) / mpf(exp_c.denominator))
return a0, b0, c0
def cascade_step(a, b, c):
"""Один шаг каскада."""
return a * mpf(5) / 9, b * mpf(5) / 3, c * c
def permutation(a, b, c):
"""Пермутация."""
return -fabs(c), -fabs(a), fabs(b)
def full_cycle(a0, b0, c0, N):
"""Полный цикл: 3 такта."""
a, b, c = a0, b0, c0
for tact in range(3):
for _ in range(N):
a, b, c = cascade_step(a, b, c)
a, b, c = permutation(a, b, c)
return a, b, c
def to_float(x, digits=6):
"""Безопасное преобразование mpf во float для печати."""
return float(round(mpf(x), digits))
# ─────────────────────────────────────────────────────────────
# Проверка возврата
# ─────────────────────────────────────────────────────────────
print("=" * 70)
print("Проверка точного возврата после 3 пермутаций")
print("=" * 70)
print(f" N | |a0| | |b0| | c0 | max|Δ|")
print("-" * 70)
for N in [2, 5, 10, 20, 30]:
a0, b0, c0 = self_consistent_ic(N)
a_start, b_start, c_start = -a0, -b0, c0
a_ret, b_ret, c_ret = full_cycle(a_start, b_start, c_start, N)
da = fabs(a_ret - a_start)
db = fabs(b_ret - b_start)
dc = fabs(c_ret - c_start)
max_err = max(da, db, dc)
print(f"{N:3d} | {to_float(a0, 6):<14.6f} | {to_float(b0, 6):<16.6f} "
f"| {to_float(c0, 10):<14.10f} | {to_float(max_err, 4):.4f}")
# ─────────────────────────────────────────────────────────────
# Неустойчивость: рост флуктуации формы
# ─────────────────────────────────────────────────────────────
print("\n" + "=" * 70)
print("Неустойчивость: рост флуктуации формы (N=20, delta_b=1e-6)")
print("=" * 70)
a0_20, b0_20, c0_20 = self_consistent_ic(20)
print(f" Шаг | |b| | |b|/b* | |c|")
print("-" * 60)
b_val = mpf(1e-6)
c_val = c0_20
a_val = a0_20
b_star = mpf(4) / 9
for n in range(31):
ratio = fabs(b_val) / b_star
print(f"{n:4d} | {to_float(fabs(b_val), 4):<14.4g} "
f"| {to_float(ratio, 4):<14.4g} | {to_float(c_val, 6):.6f}")
a_val, b_val, c_val = cascade_step(a_val, b_val, c_val)
# ─────────────────────────────────────────────────────────────
# Рис. 1: динамика компонент
# ─────────────────────────────────────────────────────────────
N_plot = 20
a0_p, b0_p, c0_p = self_consistent_ic(N_plot)
a_p = -a0_p
b_p = mpf(1e-6)
c_p = c0_p
a_arr, b_arr, c_arr = [], [], []
for n in range(61):
a_arr.append(float(fabs(a_p)))
b_arr.append(float(b_p))
c_arr.append(float(c_p))
if n < 60:
a_p, b_p, c_p = cascade_step(a_p, b_p, c_p)
if (n + 1) % N_plot == 0 and n < 60:
a_p, b_p, c_p = permutation(a_p, b_p, c_p)
fig, ax = plt.subplots(figsize=(10, 6))
ax.set_yscale("log")
ax.plot(range(61), a_arr, lw=2, label="|a| (сила)")
ax.plot(range(61), b_arr, lw=2, label="|b| (форма)")
ax.plot(range(61), c_arr, lw=2, label="c (энергия)")
ax.set_xlabel("Шаг n")
ax.set_ylabel("Значение (log)")
ax.set_title("Рис. 1. Динамика компонент (N=20, 3 такта)")
ax.legend(loc="right")
ax.grid(True, alpha=0.3)
fig.tight_layout()
fig.savefig("fig1_dynamics.png", dpi=150)
plt.close(fig)
# ─────────────────────────────────────────────────────────────
# Рис. 2: фазовый портрет (a, b)
# ─────────────────────────────────────────────────────────────
N_plot2 = 10
a0_2, b0_2, c0_2 = self_consistent_ic(N_plot2)
a2 = -a0_2
b2 = -b0_2
c2 = c0_2
a_track, b_track = [], []
for n in range(3 * N_plot2 + 1):
a_track.append(float(a2))
b_track.append(float(b2))
a2, b2, c2 = cascade_step(a2, b2, c2)
if (n + 1) % N_plot2 == 0 and n < 3 * N_plot2:
a2, b2, c2 = permutation(a2, b2, c2)
fig, ax = plt.subplots(figsize=(8, 8))
ax.scatter(a_track, b_track, s=50, c="steelblue",
label="Узлы (3 такта)", zorder=5)
ax.set_xlabel("a")
ax.set_ylabel("b")
ax.set_title("Рис. 2. Фазовый портрет (a, b) — 3 такта, N=10")
ax.legend(loc="upper right")
ax.grid(True, alpha=0.3)
fig.tight_layout()
fig.savefig("fig2_phase.png", dpi=150)
plt.close(fig)
# ─────────────────────────────────────────────────────────────
# Рис. 3: точный возврат
# ─────────────────────────────────────────────────────────────
N_ret = 5
a0_r, b0_r, c0_r = self_consistent_ic(N_ret)
a_r = -a0_r
b_r = -b0_r
c_r = c0_r
ret_a, ret_b, ret_c = [], [], []
for n in range(3 * N_ret + 1):
ret_a.append(float(a_r))
ret_b.append(float(b_r))
ret_c.append(float(c_r))
a_r, b_r, c_r = cascade_step(a_r, b_r, c_r)
if (n + 1) % N_ret == 0 and n < 3 * N_ret:
a_r, b_r, c_r = permutation(a_r, b_r, c_r)
fig, ax = plt.subplots(figsize=(10, 6))
x_range = range(3 * N_ret + 1)
ax.plot(x_range, ret_a, lw=2, label="a")
ax.plot(x_range, ret_b, lw=2, label="b")
ax.plot(x_range, ret_c, lw=2, label="c")
for x_val in [N_ret, 2 * N_ret]:
ax.axvline(x_val, ls="--", color="gray", alpha=0.7)
ax.axvline(N_ret, ls="--", color="gray", alpha=0.7, label="Пермутация")
ax.axhline(-float(a0_r), ls=":", color="blue", alpha=0.7, label="$a_0$")
ax.set_xlabel("Шаг n")
ax.set_ylabel("Значение")
ax.set_title(f"Рис. 3. Точный возврат (N={N_ret}, 3 такта)")
ax.legend(loc="best")
ax.grid(True, alpha=0.3)
fig.tight_layout()
fig.savefig("fig3_return.png", dpi=150)
plt.close(fig)
print("\nГрафики сохранены: fig1_dynamics.png, fig2_phase.png, fig3_return.png")