已知二值随机分布序列{X1,X2,X3,…,Xi,…,},在时刻i,Xi的取值为1的概率如下

1个回答

  • 第一次运行结果,4e4

    细节图:

    说明:

    图中红色线条为 loglogN,以e为底,注意绘图时其横坐标为对数,纵坐标为均匀坐标.

    蓝色线条为熵率.

    绿色线条为概率值p1.

    计算出的熵率最大值为 0.5 左右,与参考答案中的 1 值差 2 倍,估计是熵率的计算方法在理解上有偏差.

    第二次运行结果,4e4+1~8e4

    说明:

    将此幅图拼接到第一幅后面,就可以得到答案中完整的图.

    但是,运算量较大,上述运算量为4e4,若要达到1e25,则需要重复执行2.5e20,计算量相当可观.不过,可以从前期结果分析出熵率的变化趋势和概率值的变化趋势的关系.

    MATLAB代码:

    close all;

    clear all;

    clc;

    % 由于所要求长度过长,无法一次实现,可以采用数据拼接的方法.

    temp = 0;% 计算熵时的临时变量.

    Len = 4e4;% 总长度.

    i = 1: 1: Len;

    logi = log(log(i));

    randi = rand(1, Len);

    for i = 1: 1: Len

    x05line1(i) = 1;

    x05if i <= 2

    x05x05X(i) = 0;

    x05x05P1(i) = 0;

    x05x05continue;

    x05end;

    x05if mod(floor(logi(i)), 2) == 0 mod(ceil(logi(i)), 2) ~= 0

    x05x05p1(i) = 0.5;

    x05x05if randi(i) > 0.5

    x05x05x05X(i) = 1;

    x05x05else

    x05x05x05X(i) = 0;

    x05x05end;

    x05else

    x05x05p1(i) = 0;

    x05x05X(i) = 0;

    x05end;

    end;

    % p1 和 Xi 产生完毕,可以根据需要进行存储.

    % 下面计算熵率,

    for i = 1: 1: Len

    x05temp = temp - p1(i) * log2(p1(i) + eps);% log = ln,不确定是以什么为底.

    x05HN(i) = temp / i;% * 2 ?

    end;

    % 画图,注意参考答案的熵率横坐标为对数形式.

    figure;

    x = 1: 1: Len;

    plot(x, p1, 'g');hold on;% p1 值

    plot(x, logi, 'r');hold on;% log(log(N))

    plot(x, line1, 'k-');hold on;% 渐近线

    plot(x, HN, 'b');% 熵率

    set(gca, 'XScale', 'log');

    axis([1e0 1e25 0 4.1]);

    hold off;grid off;