猛跑小猪
简单的解决方案是生成一个具有均匀分布的数字(使用rand),并对其进行一些操作:r = rand;prob = [0.5, 0.1, 0.4];x = sum(r >= cumsum([0, prob]));或单线:x = sum(rand >= cumsum([0, 0.5, 0.1, 0.4]));说明这r是一个介于0和1之间的均匀分布的随机数。要生成介于1和3之间的整数,诀窍是将[0,1]范围划分为3个片段,其中每个片段的长度与其对应的概率成比例。就您而言,您将:段[0,0.5),对应于数字1。段[0.5,0.6),对应于数字2。段[0.6,1],对应于数字3。概率r掉落内的任何段的正比于你想为每个号码的概率。sum(r >= cumsum([0, prob]))只是将整数映射到段之一的一种好方法。延期如果您对创建随机数的向量/矩阵感兴趣,可以使用循环或arrayfun:r = rand(3); % # Any size you wantx = arrayfun(@(z)sum(z >= cumsum([0, prob])), r);当然,还有矢量化解决方案,我太懒了,无法编写它。