=========================================
function y=dis_rand(x,p,n)
%dis_rand 產生離散分布隨機數
% x:可能取值
% p:取值概率
% n:擬生成隨機數的數目
cp=cumsum(p);
y=zeros(1,n);
for i=1:n
y(i)=x(sum(cp<=rand(1))+1);
end
算法說明:利用matlab中的rand函數獲取區間[0,1]上均勻分布的隨機數,根據希望的分布律把[0,1]區間分段,各段的長度依次為隨機數取各個可能值的概率。當那個均勻分布的隨機數落在其中第i個小段上時,就把第i個可能取值輸出。
=========================================
妳的問題這樣調用:
y=dis_rand([0 0.5 1],[1/3 1/3 1/3],100)
即按照妳要的概率從0,0.5,1三個數字中產生100個隨機數。但我看了下因為rand本身在樣本數少的時候就不是很準確,這樣100個樣本下,1/3概率還是有明顯偏差的。不過所有概率方面的東西要在小樣本下都很難”準確“了。