Бифуркационная диаграмма для аттрактора Ресслера

Я пытаюсь нарисовать бифуркационную диаграмму аттрактора Ресслера. Я фиксирую параметры "a" и "b" и изменяю "c" для бифуркационной диаграммы. Мой мыслительный процесс:

  1. Для каждого значения "с" найти траекторию.
  2. Возьмите проекцию на плоскость XY
  3. Найдите карту Лоренца, проецируя на ось x (запишите все значения x, где y переходит от положительного к отрицательному)
  4. Используйте эту последовательность для бифуркационной диаграммы.

Мой код выглядит следующим образом:

import matplotlib.pyplot as plt
import numpy as np
from scipy import integrate

solution_time_interval = np.arange(0, 1000)
c_values = np.arange(4, 20, 0.1)
m = 0.7
a = 0.1
b = 0.1

initial_values = [np.random.random(), np.random.random(), np.random.random()]

seq_X = initial_values[0]*np.ones((len(solution_time_interval), len(c_values)))

def rossler(X, t, c):
    x, y, z = X
    return [-y-z, x+a*y, b+z*(x-c)]

def lorenz_map(P, Q, projection=0, cond=0):
    other = P
    ref = Q
    if projection == 1:
        other = Q
        ref = P
    diff = np.diff(np.subtract(ref, cond))
    proj = []
    for i in range(0, len(diff)):
        if diff[i] < 0:
            r = (0-ref[i])/(ref[i] + ref[i+1])
            proj.append(other[i] + r*(other[i] + other[i+1]))
    return proj

for c in range(0, len(c_values)):
    asol = integrate.odeint(rossler, [X[0][0], Y[0][0], Z[0][0]], solution_time_interval, args=(c_values[c],))

    asol_x = asol[:, 0]
    asol_y = asol[:, 1]
    asol_z = asol[:, 2]

    l_x = lorenz_map(asol_x[-600:-1], asol_y[-600:-1])

    for i in range(0, len(l_x)):
        seq_X[i][c] = l_x[i]

plot_x = c_values
plot_y = [tuple(i) for i in seq_X.T]

plt.figure()
plt.plot(plot_x, plot_y, ls='', marker=',', color='blue')

plt.figure()
plt.plot(asol_x, asol_y)

plt.show()

Однако я не могу получить правильную бифуркационную диаграмму. Мой бифуркационный сюжет выглядит так этот,

Моя траектория для конечного значения "с" выглядит так

Поэтому я думаю, что проблема заключается в том, как я строю бифуркации, поскольку моя траектория выглядит хорошо. Я попытался сравнить мой подход к обсуждению здесь, но я не смог найти проблему с моим кодом. Любая помощь оценивается.

Спасибо.

0 ответов

Другие вопросы по тегам