Я использовал следующий код для создания тепловой карты для данной функции. Здесь вычисляется глобальный показатель ляпунов для вариации логистической карты - я добавил параметр p. Там, где это хорошо, меня на самом деле не волнует, каково точное значение глобального показателя Ляпунова, а скорее, положительно оно или отрицательно.
Вот код, который я использовал:
# Logistic Function
def p_logistic(A, x, p):
return (A/4) * (((p+1)**(p+1))/(p**p)) * (x**p) * (1-x)
# Lyapunov Exponent
def p_lyap(A, x, p):
return np.log(abs((A/4) * (((p+1)**(p+1))/(p**p)) * (p*(x**(p-1)) - (p+1)*(x**p))))
n = 500
A = np.linspace(2, 4, n)
p = np.linspace(0.5, 5, n)
def F(A, p):
A, p = np.meshgrid(A, p)
lyapunov = 0
x = 0.9
N = 100
for i in range(0,N):
lyapunov = lyapunov + p_lyap(A, x, p)
x = p_logistic(A, x, p)
global_lyapunov = lyapunov/N
return global_lyapunov
z = F(A, p)
plt.figure(figsize=(8,8))
xlabels = ['{:3.1f}'.format(x) for x in A]
ylabels = ['{:3.1f}'.format(y) for y in p]
ax = sns.heatmap(z, xticklabels = A, yticklabels = p)
Я пытался использовать операторы if, чтобы вернуть глобальный показатель ляпунова как 1, если он больше 0, и -1, если он меньше 0, но он вернул ошибку
The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
По сути, мне бы хотелось, чтобы на моей тепловой карте было только 3 цвета, один для того, чтобы глобальный показатель ляпунов был отрицательным, равным 0 и положительным. Есть ли способ, которым это возможно?