gpt4 book ai didi

matlab - 从 Matlab 中预先指定的概率质量函数中抽取随机数

转载 作者:行者123 更新时间:2023-12-02 19:49:08 28 4
gpt4 key购买 nike

我在 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 给出。

最佳答案

使用统计工具箱

randsample函数可以直接这样做:

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

不使用工具箱

手动方法:

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

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

对于您的示例,使用 n=1e6 两种方法中的任何一种都会给出与此类似的直方图:

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

enter image description here

关于matlab - 从 Matlab 中预先指定的概率质量函数中抽取随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58607156/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com