https://habr.com/ru/post/447874/- Python
- Математика
- Научно-популярное
- Разработка под Windows
Введение
На Habr достаточно много публикаций, в которых рассматривается понятие энтропии, вот только некоторые из них [1÷5]. Публикации были позитивно восприняты читателями и вызвали большой интерес. Достаточно привести определение энтропии, которое дал автор публикации [1]: «энтропия — это то, как много информации вам не известно о системе». Публикаций о явлении хаосе на Habr тоже достаточно [6÷9]. Однако связь энтропии и хаоса в обеих группах публикаций не рассматривалась.
Это объясняется тем, что различные области знаний выделяют разные виды меры хаоса:
- информационная;
- термодинамическая;
- дифференциальная;
- культурная.
Также описываются меры хаоса с учётом их специфики даже в одной из указанных областей довольно сложно.
Пробуя предельно упростить задачу, я решил рассмотреть связь информационной энтропии и хаоса на примере сходства областей прохождения от порядка к хаосу на диаграммах в виде точечных отображений и на графиках энтропийного коэффициента для этих областей.
Что из этого получилось Вы узнаете заглянув под кат.
Механизмы перехода от порядка к хаосу
Анализ механизмов перехода от порядка к хаосу в реальных системах и различных моделях выявил универсальность относительно немногих сценариев перехода к хаосу. Переход к хаосу может быть представлен в виде диаграммы бифуркаций (термин «бифуркация» употребляется для обозначения качественных перестроек системы c возникновением нового режима её поведения).
Вхождение системы в непредсказуемый режим описывается каскадом бифуркаций, следующих одна за другой. Каскад бифуркаций ведет последовательно к появлению выбора между двумя решениями, затем четырьмя и так далее, система начинает колебаться в хаотическом, турбулентном режиме последовательного удвоения количества возможных значений.
Будем рассматривать бифуркации удвоения периода и появление хаоса в точечных отображениях. Отображение – это функция, которая показывает зависимость последующих значений параметров системы от предыдущих значений:
Рассмотрим также и вторую часто применяемую функцию:
C помощью точечных отображений изучают объекты не с
непрерывным, а с дискретным временем. При переходе к отображению размерность изучаемой системы может уменьшаться.
При изменении внешнего параметра \lambda точечные отображения демонстрируют довольно сложное поведение, которое становится хаотическим при достаточно больших \lambda. Хаос это очень быстрое разбегание траекторий в фазовом пространстве.
Бифуркация–это качественная перестройка картины движения. Значения управляющего параметра, при которых происходят бифуркации, называются критическими или бифуркационными значениями.
Для построения диаграмм будем применять следующие два листинга:
№1. Для функции:
Листинг программы# -*- coding: utf8 -*-
import matplotlib.pyplot as plt
from numpy import *
def f(a,x0):
x1=(a-1)/a#точка пересечения функции с прямой
def ff(x):#логистическая функция
return a*x*(1-x)
def fl(x):
return x
x=x0;y=0;Y=[];X=[]
for i in arange(1,1000,1):
X.append(x)
Y.append(y)
y=ff(x)
X.append(x)
Y.append(y)
x=y
plt.title('Диаграмма логистической функции \n\
$x_{n+1}=\lambda \cdot x_{n}\cdot (1-x_{n})$ при $\lambda$ =%s и x0=%s '%(a,x0))
plt.plot(X,Y,'r')
x1=arange(0,1,0.001)
y1=[ff(x) for x in x1]
y2=[fl(x) for x in x1]
plt.plot(x1,y1,'b')
plt.plot(x1,y2,'g')
plt.grid(True)
plt.show()
№ 2. Для функции
Листинг программы# -*- coding: utf8 -*-
import matplotlib.pyplot as plt
from numpy import *
def f(a,x0):
x1=((a-1)/a)**0.5
def ff(x):#логистическая функция
return a*x*(1-x**2)
def fl(x):
return x
x=x0;y=0;Y=[];X=[]
for i in arange(1,1000,1):
X.append(x)
Y.append(y)
y=ff(x)
X.append(x)
Y.append(y)
x=y
plt.title('Диаграмма логистической функции \n\
$x_{n+1}=\lambda \cdot x_{n}\cdot (1-x_{n}^{2})$ при $\lambda$ =%s и x0=%s '%(a,x0))
plt.plot(X,Y,'r')
x1=arange(0,1,0.001)
y1=[ff(x) for x in x1]
y2=[fl(x) for x in x1]
plt.plot(x1,y1,'b')
plt.plot(x1,y2,'g')
plt.grid(True)
plt.show()
Для оценки влияния характера логистической функции на критические значения
рассмотрим диаграммы с функцией
для этого будем применять листинг №1:
При 0< \lambda <1 для
и x0=0,47 получим диаграмму:
В этом случае отображение имеет единственную неподвижную точку
которая является устойчивой.
При
для
x0=0,7 получим диаграмму:
На отрезке [0, 1] появляется еще одна неподвижная устойчивая точка
При
для
и x0=0,01 получим диаграмму:
Неподвижная точка
, теряет устойчивость.
При
для
и x0=0,7 получим диаграмму:
Отображение претерпевает бифуркацию: неподвижная точка
становится неустойчивой, и вместо нее появляется двукратный цикл.
При
для
и x0=0,2 получим диаграмму:
При переходе параметра
через значение
, 2-кратный цикл становится 4-кратным, и далее.
При конечном значении
в системе имеются неустойчивые циклы всех возможных порядков:
Для оценки влияния характера логистической функции на критические значения
рассмотрим диаграммы с функцией
, для этого будем применять листинг №2.
При
для
и x0=0,2:
Отображение имеет единственную неподвижную точку
, которая является устойчивой.
При
для
и x0=0,55:
Точка
теряет устойчивость, появляется новая устойчивая точка
При
для
и x0=0,2:
Происходит бифуркация удвоения периода, появляется 2-кратный цикл. Дальнейшее увеличение
ведет к каскаду бифуркаций удвоения периода.
При
для
и x0=0,2:
Увеличение
привело к каскаду бифуркаций удвоения периода.
При
в системе имеются неустойчивые циклы всех возможных периодов:
Как было показано на диаграммах, с ростом порядка логистической функции диапазон изменения сужается.
При помощи диаграмм мы проследили путь от порядка к хаосу, задавая при этом значения
для разных логистических функций. Остаётся ответить на вопрос: как измерять хаос? Ответ для некоторых из перечисленных в начале статьи типов хаоса известен
– энтропия мера хаоса. Этот ответ в полной мере можно отнести и к информационному хаосу, однако какую энтропию здесь применить и как сравнить с уже рассмотренным численным значением
— на этот вопрос я попытаюсь ответить в следующей части статьи.
Информационная энтропия и энтропийный коэффициент
Мы будем рассматривать информационную двоичную энтропию для независимых случайных событий
c
возможными состояниями, распределёнными с вероятностями
. Информационная двоичная энтропия рассчитывается по формуле:
Эта величина также называется средней энтропией сообщения. Величина
называется частной энтропией, характеризующей только
i-e состояние. В общем случае основание логарифма в определении энтропии может быть любым, большим 1; его выбор определяет единицу измерения энтропии.
Мы будем использовать десятичные логарифмы, при которых энтропия и информация измеряется в битах. Количество информации в битах будет вычисляться правильно, когда, например, переменные
и
будут подставляться в соответствующие выражения для энтропии безразлично в каких, но обязательно в одних и тех же единицах. Действительно:
где X и
должны быть в одних и тех же единицах.
Оценка энтропийного значения случайной величины по экспериментальным данным находится по гистограмме из следующего соотношения:
где:
–ширина каждого столбца гистограммы;
— количество столбцов;
-общее количество данных;
— количество данных в
-том столбце.
Энтропийный коэффициент определиться из соотношения:
где:
– среднеквадратичное отклонение.
Информационная энтропия как мера хаоса
Для анализа явлений информационного хаоса используя энтропийный коэффициент, вначале создадим диаграмму ветвления для функции
с нанесением переходных областей, полученных при построении гистограмм:
Диаграмма ветвленияimport matplotlib.pyplot as plt
import matplotlib.pyplot as plt
from numpy import*
N=1000
y=[]
y.append(0.5)
for r in arange(3.58,3.9,0.0001):
for n in arange(1,N,1):
y.append(round(r*y[n-1]*(1-y[n-1]),4))
y=y[N-250:N]
x=[r ]*250
plt.plot( x,y, color='black', linestyle=' ', marker='.', markersize=1)
plt.figure(1)
plt.title("Диаграмма ветвления при 3,6<= $\lambda$ <=3,9")
plt.xlabel("r")
plt.ylabel("$\lambda$ ")
plt.axvline(x=3.63,color='black',linestyle='--')
plt.axvline(x=3.74,color='black',linestyle='--')
plt.axvline(x=3.83,color='black',linestyle='--')
plt.axvline(x=3.9,color='black',linestyle='--')
plt.show()
Получим:
Построим график для энтропийного коэффициента при тех же областях
:
График для энтропийного коэффициентаimport matplotlib.pyplot as plt
from numpy import*
data_k=[]
m='auto'
for p in arange(3.58,3.9,0.0001):
q=[round(p,2)]
M=zeros([1001,1])
for j in arange(0,1,1):
M[0,j]=0.5
for j in arange(0,1,1):
for i in arange(1,1001,1):
M[i,j]=q[j]*M[i-1,j]*(1-M[i-1,j])
a=[]
for i in arange(0,1001,1):
a.append(M[i,0])
n=len(a)
z=histogram(a, bins=m)
if type(m) is str:
m=len(z[0])
y=z[0]
d=z[1][1]-z[1][0]
h=0.5*d*n*10**(-sum([w*log10(w) for w in y if w!=0])/n)
ke=round(h/std(a),3)
data_k.append(ke)
plt.title("Энтропийный коэффициент ke для 3,6<= $\lambda$ <=3,9")
plt.plot(arange(3.58,3.9,0.0001),data_k)
plt.xlabel("$\lambda$ ")
plt.ylabel("ke")
plt.axvline(x=3.63,color='black',linestyle='--')
plt.axvline(x=3.74,color='black',linestyle='--')
plt.axvline(x=3.83,color='black',linestyle='--')
plt.axvline(x=3.9,color='black',linestyle='--')
plt.grid()
plt.show()
Получим:
Сравнивая диаграмму и график, видим идентичное отображение областей на диаграмме и на графике для энтропийного коэффициента для функции
.
Для дальнейшего анализа явлений информационного хаоса с использованием энтропийного коэффициента, создадим диаграмму ветвления для логистической функции:
с нанесением переходных областей:
Диаграмма ветвленияimport matplotlib.pyplot as plt
from numpy import*
N=1000
y=[]
y.append(0.5)
for r in arange(2.25,2.56,0.0001):
for n in arange(1,N,1):
y.append(round(r*y[n-1]*(1-(y[n-1])**2),4))
y=y[N-250:N]
x=[r ]*250
plt.plot( x,y, color='black', linestyle=' ', marker='.', markersize=1)
plt.figure(1)
plt.title("Диаграмма ветвления при 2.25<=$\lambda$ <=2.56")
plt.xlabel("$\lambda$ ")
plt.ylabel("y")
plt.axvline(x=2.34,color='black',linestyle='--')
plt.axvline(x=2.39,color='black',linestyle='--')
plt.axvline(x=2.45,color='black',linestyle='--')
plt.axvline(x=2.49,color='black',linestyle='--')
plt.axvline(x=2.56,color='black',linestyle='--')
plt.show()
Получим:
Построим график для энтропийного коэффициента при тех же областях
:
График энтропийного коэффициентаimport matplotlib.pyplot as plt
from numpy import*
data_k=[]
m='auto'
for p in arange(2.25,2.56,0.0001):
q=[round(p,2)]
M=zeros([1001,1])
for j in arange(0,1,1):
M[0,j]=0.5
for j in arange(0,1,1):
for i in arange(1,1001,1):
M[i,j]=q[j]*M[i-1,j]*(1-(M[i-1,j])**2)
a=[]
for i in arange(0,1001,1):
a.append(M[i,0])
n=len(a)
z=histogram(a, bins=m)
if type(m) is str:
m=len(z[0])
y=z[0]
d=z[1][1]-z[1][0]
h=0.5*d*n*10**(-sum([w*log10(w) for w in y if w!=0])/n)
ke=round(h/std(a),3)
data_k.append(ke)
plt.figure(2)
plt.title("Энтропийный коэффициент ke для 2.25<= $\lambda$ <=2.56")
plt.plot(arange(2.25,2.56,0.0001),data_k)
plt.xlabel("$\lambda$ ")
plt.ylabel("ke")
plt.axvline(x=2.34,color='black',linestyle='--')
plt.axvline(x=2.39,color='black',linestyle='--')
plt.axvline(x=2.45,color='black',linestyle='--')
plt.axvline(x=2.49,color='black',linestyle='--')
plt.axvline(x=2.56,color='black',linestyle='--')
plt.grid()
plt.show()
Получим:
Сравнивая диаграмму и график, видим идентичное отображение областей на диаграмме и на графике для энтропийного коэффициента для функции
Выводы:
В статье решена учебная задача: является ли информационная энтропия мерой хаоса, а также средствами Python дан утвердительный ответ на этот вопрос.
Ссылки
- Энтропия? Это просто!
- Введение в понятие энтропии и ее многоликость.
- Энтропия и деревья принятия решений.
- Трактат об энтропии.
- Энтропия и WinRAR.
- Математические модели хаоса.
- Немного о хаосе и о том, как его сотворить.
- Критический взгляд на аттрактор Лоренца.
- Генераторы хаоса на ПЛИС.