代码之家  ›  专栏  ›  技术社区  ›  obchardon

如何生成一个表示离散均匀分布和的数

  •  3
  • obchardon  · 技术社区  · 7 年前

    步骤1:

    假设我想生成离散的均匀随机数,取-1或1。所以换句话说,我想生成具有以下分布的数字:

    p(x=-1)=0.5
    p(x=1)=0.5
    < /代码> 
    
    

    要生成100个这些数字的数组,我可以编写以下代码:

    n=100
    dv=[-1,1];%离散值
    ri=unidrnd(2,n,1);%随机均匀指数
    dud=dv(ri);%离散均匀分布
    < /代码> 
    
    

    my dud array looks like:[-1,1,1,1,-1,-1,1,-1,…]

    步骤2:

    现在我想生成10个数字,等于sum(dud),所以10个数字的分布对应于100个数字的总和,跟随一个离散的均匀分布。

    当然我能做到:

    for ii=1:10
    n=100;
    dv=[-1,1];%离散值
    ri=unidrnd(2,n,1);%随机索引
    dud=dv(ri);%离散均匀分布
    sdud(ii)=sum(dud);
    结束
    < /代码> 
    
    

    < /P>

    sdud=
    
    2 2-6-2-4 2 4 0 2
    < /代码> 
    
    

    是否有数学/matlab技巧可以做到这一点?不使用for循环。

    sdud的柱状图(有10000个值,n=100)如下:

    奖金:

    如果可以修改原始的离散值,那就太好了。因此,离散值可以是,例如,[0,1,2],而不是[-1,1],每个值的出现次数为p=1/离散值的个数,所以在这个例子中是1/3。

    P(X = -1) = 0.5
    P(X =  1) = 0.5
    

    要生成这些数字的100个数组,我可以编写以下代码:

    n   = 100
    DV  = [-1,1];          % Discrete value
    RI  = unidrnd(2,n,1);  % Random uniform index
    DUD = DV(RI);          % Discrete uniform distribution
    

    我的无用阵列看起来像:[-1,1,1,1,-1,-1,1,-1,...]

    步骤2:

    现在我想生成10个等于sum(DUD),所以10个数的分布对应于100个数的和,然后是离散均匀分布。

    当然我能做到:

    for ii = 1:10
        n   = 100;
        DV  = [-1,1];          % Discrete value
        RI  = unidrnd(2,n,1);  % Random index
        DUD = DV(RI);          % Discrete uniform distribution
        SDUD(ii) = sum(DUD);
    end
    

    SDUD =
    
       2   2  -6  -2  -4   2   4   4   0   2 
    

    有没有数学/matlab的诀窍?不使用for循环。

    sdud的柱状图(10000个值,n=100)如下:

    enter image description here

    奖金:

    如果可以修改原始的离散值,那就太好了。因此,在这个例子中,离散值可以是,例如,[0,1,2],每一个都出现p=1/离散值的个数,所以是1/3。

    2 回复  |  直到 7 年前
        1
  •  4
  •   Luis Mendo    7 年前

    两个值

    这基本上是一个 binomial distribution (参见Matlab) binornd ,仅缩放和移动,因为基础值由 DV 而不是 0 1 :

    n = 100;
    DV = [-1 1];
    p = .5; % probability of DV(2)
    M = 10;
    SDUD = (DV(2)-DV(1))*binornd(n, p, M, 1)+DV(1)*n;
    

    对于任意数量的值

    你有的是 multinomial distribution (参见Matlab) mnrnd ):

    n = 100;
    DV = [-2 -1 0 1 2];
    p = [.1 .2 .3 .3 .1]; % probability of each value. Sum 1, same size as DV
    M = 10;
    SDUD = sum(bsxfun(@times, DV, mnrnd(n, p, M)), 2);
    
        2
  •  2
  •   Robert Dodier    7 年前

    一般来说,自变量和的pdf等于和变量的pdf的卷积。当变量是离散的,卷积的计算非常方便,通过matlab函数 conv (可能是 fft 为了快速、准确的计算)。

    当PDF是一致的,那么卷积的结果是二项式或多项式PDF。但是卷积也适用于非均匀的PDF。