在MatLab中从预先指定的概率质量函数中提取随机数

vuktfyat  于 2022-11-15  发布在  Matlab
关注(0)|答案(1)|浏览(130)

我在MatLab中有一个支持(supp_epsilon)和一个概率质量函数(pr_mass_epsilon),构造如下。

supp_epsilon=[0.005 0.01 0.015 0.02]; 

suppsize_epsilon=size(supp_epsilon,2);

pr_mass_epsilon=zeros(suppsize_epsilon,1);

alpha=1;
beta=4;

for j=1:suppsize_epsilon
    pr_mass_epsilon(j)=betacdf(supp_epsilon(j),alpha,beta)/sum(betacdf(supp_epsilon,alpha,beta));
end

请注意,pr_mass_epsilon的组件总和为1。现在,我想从pr_mass_epsilon中抽取n随机数。我怎么能这样做呢?我想要一个代码,任何suppsize_epsilon的工作。
换句话说:我想从supp_epsilon中随机抽取元素,每个元素的概率由pr_mass_epsilon给出。

y3bcpkx1

y3bcpkx11#

使用统计工具箱

randsample函数可以直接执行此操作:

result = randsample(supp_epsilon, n, true, pr_mass_epsilon);

不使用工具箱

手动方法:
1.在区间(0,1)内产生均匀随机变量的n个样本。
1.将每个样本与分布函数(累积质量和函数)进行比较。
1.查看每个均匀样本位于分布函数的哪个区间。
1.索引到可能值的数组中

result = supp_epsilon(sum(rand(1,n)>cumsum(pr_mass_epsilon(:)), 1)+1);

对于您的示例,使用n=1e6时,这两种方法中的任何一种都会生成类似以下内容的直方图:

histogram(result, 'normalization', 'probability')

相关问题