第1步:
比方说,我想生成值为-1或1的离散均匀随机数。因此,换句话说,我想生成具有以下分布的数:
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
我的DUD数组看起来像:[-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
是否有数学/数学技巧可以做到这一点?而无需使用for循环。
SDUD(具有10000个值且n = 100)的直方图如下所示:
奖金:
如果可以修改原始离散值,那就太好了。因此,离散值可以是[0,1,2],而不是[-1,1],每个都出现p = 1 / number_of_discrete_value,因此在此示例中为1/3。
答案 0 :(得分:4)
从本质上讲,这是一个binomial distribution(请参阅Matlab的binornd
),仅可缩放和移动,因为基础值由DV
给出,而不是0
和{{1} }:
1
您拥有的是multinomial distribution(请参阅Matlab的mnrnd
):
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;
答案 1 :(得分:2)
通常,自变量的总和具有等于被求变量的pdf的卷积的pdf。当变量是离散的时,可通过Matlab函数conv
(很可能调用fft
进行快速精确的计算)来方便地计算卷积。
当pdf一致时,则卷积结果为二项式或多项式pdf。但是卷积的东西也适用于非均匀的pdf。