Создадим таблицу для генерации последовательности: CREATE TABLE bifurcation ( mu FLOAT, -- параметр системы n INT, -- номер итерации x FLOAT -- значение функции ); -- Заполняем данными: xₙ₊₁ = μ * xₙ * (1 - xₙ) INSERT INTO bifurcation WITH RECURSIVE seq AS ( SELECT mu, 0 AS n, 0.5 AS x -- начальное значение x₀ FROM generate_series(2.5, 4.0, 0.01) AS mu -- диапазон μ UNION ALL SELECT mu, n + 1, mu * x * (1 - x) -- формула итерации FROM seq WHERE n < 500 -- количество итераций ) SELECT * FROM seq WHERE n > 400; -- используем последние 100 итераций (аттрактор) CREATE TABLE attractors AS SELECT mu, ROUND(x::numeric, 3) AS x_rounded, -- округление для группировки COUNT(*) AS count_points FROM bifurcation GROUP BY mu, x_rounded; WITH periods AS ( SELECT mu, COUNT(*) AS period -- количество уникальных точек ≈ период цикла FROM attractors GROUP BY mu ) SELECT * FROM periods; WITH periods AS ( SELECT mu, COUNT(DISTINCT x_rounded) AS period FROM attractors GROUP BY mu
Как определить точку бифуркацию для дискретной функции с использованием PostgreSQL?
11 августа 202511 авг 2025
3
2 мин