matlab 如何生成指定分布的随机数?
发布网友
发布时间:2022-05-03 10:16
我来回答
共1个回答
热心网友
时间:2022-06-18 22:46
抄别的一个函数给你吧:
=========================================
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概率还是有明显偏差的。不过所有概率方面的东西要在小样本下都很难”准确“了。