matlab - 从 Matlab 中预先指定的概率质量函数中绘制随机数
问题描述
我在 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
。现在,我想从中抽取n
随机数pr_mass_epsilon
。我怎样才能做到这一点?我想要一个适用于任何suppsize_epsilon
.
解决方案
使用统计工具箱
该randsample
函数可以直接执行此操作:
result = randsample(supp_epsilon, n, true, pr_mass_epsilon);
不使用工具箱
手动方法:
- 在区间 (0,1) 中生成
n
均匀随机变量的样本。 - 将每个样本与分布函数(质量函数的累积和)进行比较。
- 查看每个均匀样本位于分布函数的哪个区间。
- 索引到可能值的数组
result = supp_epsilon(sum(rand(1,n)>cumsum(pr_mass_epsilon(:)), 1)+1);
对于您的示例,使用n=1e6
这两种方法中的任何一种都会给出与此类似的直方图:
histogram(result, 'normalization', 'probability')
推荐阅读
- spring-boot - Spring REST:仅当请求者是朋友时才显示用户的某些数据
- office-js - Excel自定义功能:TypeError:Windows桌面上的网络请求失败,在线和mac(桌面和在线)
- javascript - 替换文件名的坏字符
- reactjs - 如何使 ListItem 拆分为多个列 React.js
- c# - LINQ,按属性分组,同时保持其他属性排序
- android - 膨胀类 androidx.constraintlayout.widget.ConstraintLayout 的运行时错误
- javascript - 找不到本地主机 socket.io 服务器 (404)
- visual-studio - 使用 .NET Framework 发布时如何复制 webpack 构建
- python - Python - Pandas - 查找两个数据帧之间的匹配项
- python - 如何将产品 3d numpy 数组行点成另一个 3d 数组行并获得 3d 数组?