Рисунок 1. График гипотез. Ось y: средняя энтропия. ось x: биты.
Этот вопрос является продолжением предыдущего вопроса Matlab: график энтропии против длина оцифрованного кода
Я хочу вычислить энтропию случайной величины, которая является дискретной версией (0/1) непрерывной случайной величины x
. Случайная величина обозначает состояние нелинейной динамической системы, называемой картой палатки. Итерации карты палатки дают временной ряд длиной N
.
Код должен выйти, как только энтропия дискретизированного временного ряда станет равной энтропии динамической системы. Теоретически известно, что энтропия системы H is log_e(2) or ln(2) = 0.69
ок. Цель кода - найти количество итераций j
, необходимых для получения той же энтропии, что и энтропия системы H
.
Проблема 1: Моя проблема в том, что когда я вычисляю энтропию двоичного временного ряда, который является информационным сообщением, то должен ли я делать это в той же базе, что и H? ИЛИ Должен ли я преобразовать значение H в биты, потому что информационное сообщение находится в 0/1? Оба дают разные результаты, т. Е. Разные значения j.
Проблема 2: Может случиться так, что вероятность нулей или единиц может стать нулевой, так что соответствующая ей энтропия может стать бесконечностью. Чтобы этого не произошло, я подумал поставить проверку с помощью if-else. Но петля
if entropy(:,j)==NaN
entropy(:,j)=0;
end
похоже не работает. Буду рад идеям и помочь решить эту проблему. Спасибо
ОБНОВЛЕНИЕ: я реализовал предложения и ответы по исправлению кода. Однако раньше моя логика решения была неправильной. В исправленном коде я хочу вычислить энтропию для длины временного ряда, имеющего биты 2,8,16,32. Для каждой длины кода рассчитывается энтропия. Вычисление энтропии для каждой длины кода повторяется N раз, начиная с каждого различного начального состояния динамической системы. Эта оценка применяется для проверки того, при какой длине кода энтропия становится равной 1. Характер графика зависимости энтропии от битов должен возрастать от нуля и постепенно приближаться к 1, после чего он насыщается - остается постоянным для всех оставшихся битов. Я не могу получить эту кривую (рисунок 1). Буду признателен за помощь в исправлении моей ошибки.
clear all
H = 1 %in bits
Bits = [2,8,16,32,64];
threshold = 0.5;
N=100; %Number of runs of the experiment
for r = 1:length(Bits)
t = Bits(r)
for Runs = 1:N
x(1) = rand;
for j = 2:t
% Iterating over the Tent Map
if x(j - 1) < 0.5
x(j) = 2 * x(j - 1);
else
x(j) = 2 * (1 - x(j - 1));
end % if
end
%Binarizing the output of the Tent Map
s = (x >=threshold);
p1 = sum(s == 1 ) / length(s); %calculating probaility of number of 1's
p0 = 1 - p1; % calculating probability of number of 0'1
entropy(t) = -p1 * log2(p1) - (1 - p1) * log2(1 - p1); %calculating entropy in bits
if isnan(entropy(t))
entropy(t) = 0;
end
%disp(abs(lambda-H))
end
Entropy_Run(Runs) = entropy(t)
end
Entropy_Bits(r) = mean(Entropy_Run)
plot(Bits,Entropy_Bits)
~(abs(lambda-H)<tol))
иtol
? - person noumenal   schedule 01.06.2016