产生一点概率的随机数

1 2 3 4 5五个数 出现的概率为0.03 0.03 0.03 0.45 0.45 如何用MATLAB 表示按这个概率从1到5抽取一个数

你好,可以先生成一个从0到1的随机数a,然后分别跟
0.03
0.03+0.03
0.03+0.03+0.03
0.03+0.03+0.03+0.45
这四个数比较,然后小于0.03就是1,否则小于0.06就是2,否则小于0.09就是3,否则小于0.54就是4,最后剩下的可能就是5。
注意你给的概率之和等于0.99,不等于1,所以我这里假设出现5的概率是0.46
代码这样写

a = rand(1);
if(a<0.03)
n = 1;
elseif(a<0.06)
n=2;
elseif(a<0.09)
n=3;
elseif(a<0.54)
n=4;
else
n=5;
end
n

最后n就是你需要的那个随机数字

当然你也可以用matlab自带的函数实现!

n = randsrc(1,1,[1,2,3,4,5; 0.03,0.03,0.03,0.45,0.46]) %生成11列按照概率的15

可以先生成一个随机数,记作
n = rand(1);
然后分别与各数的概率比较和相减
例如当n = 0.1时,n > 0.03,跳过1,并令n = n - 0.03 = 0.1 - 0.03 = 0.07,
又有n>0.03,跳过2,并令n = n - 0.03 = 0.07 - 0.03 = 0.04,
又有n>0.03,跳过3,并令n = n - 0.03 = 0.04 - 0.03 = 0.01,
此时n<0.45,返回4

function Result = FunctionNameHere(Numbers,Probabilities)
    n = rand(1);
    for i= 1 : length(Numbers)
        if n < Probabilities(i)
            Result = Numbers(i);
            return;
        else
            n = n - Probabilities(i);
        end
    end     
end