我在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
给出。
1条答案
按热度按时间y3bcpkx11#
使用统计工具箱
randsample
函数可以直接执行此操作:不使用工具箱
手动方法:
1.在区间(0,1)内产生均匀随机变量的
n
个样本。1.将每个样本与分布函数(累积质量和函数)进行比较。
1.查看每个均匀样本位于分布函数的哪个区间。
1.索引到可能值的数组中
对于您的示例,使用
n=1e6
时,这两种方法中的任何一种都会生成类似以下内容的直方图: