【问题标题】:Draw random numbers from pre-specified probability mass function in Matlab从 Matlab 中预先指定的概率质量函数中绘制随机数
【发布时间】:2020-02-24 16:15:03
【问题描述】:

我在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 的代码。

【问题讨论】:

标签: matlab random distribution probability-theory


【解决方案1】:

使用统计工具箱

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')

【讨论】:

  • 这里的答案(有和没有工具箱)在简单性和可访问性方面都优于this questionthis one
  • @SecretAgentMan 很好的发现。你认为这应该被标记为你链接的第二个的副本吗?唯一的区别是值的总体
  • 我将这两个标记为这个的副本(这确实应该是目标),因为它们都处理从概率质量函数生成离散随机变量。所以不,我认为他们应该是这个的骗子。
  • 谢谢,我现在已经发布了一个与向量相关的问题stackoverflow.com/questions/58631801/…
猜你喜欢
  • 2020-09-08
  • 2011-05-03
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 2015-08-11
  • 1970-01-01
  • 1970-01-01
  • 2014-12-07
相关资源
最近更新 更多