Бифуркационная диаграмма для аттрактора Ресслера
Я пытаюсь нарисовать бифуркационную диаграмму аттрактора Ресслера. Я фиксирую параметры "a" и "b" и изменяю "c" для бифуркационной диаграммы. Мой мыслительный процесс:
- Для каждого значения "с" найти траекторию.
- Возьмите проекцию на плоскость XY
- Найдите карту Лоренца, проецируя на ось x (запишите все значения x, где y переходит от положительного к отрицательному)
- Используйте эту последовательность для бифуркационной диаграммы.
Мой код выглядит следующим образом:
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()
Однако я не могу получить правильную бифуркационную диаграмму. Мой бифуркационный сюжет выглядит так ,
Моя траектория для конечного значения "с" выглядит так
Поэтому я думаю, что проблема заключается в том, как я строю бифуркации, поскольку моя траектория выглядит хорошо. Я попытался сравнить мой подход к обсуждению здесь, но я не смог найти проблему с моим кодом. Любая помощь оценивается.
Спасибо.