步骤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
是否有数学/ matlab 技巧可以做到这一点?不使用 for 循环。
SDUD 的直方图(具有 10000 个值和 n=100)如下所示:
奖金:
如果可以修改原始离散值,那就太好了。因此,离散值可以代替 [-1,1],例如 [0,1,2],每个出现 p = 1/number_of_discrete_value,因此在本例中为 1/3。