matlab - 从截断的正态分布中绘制伪随机数

标签 matlab normal-distribution truncated

Matlab 有函数 randn 从正态分布中绘制,例如

x = 0.5 + 0.1*randn() 

从均值 0.5 和标准差 0.1 的正态分布中绘制伪随机数。

鉴于此,以下 Matlab 代码是否等效于从在 1 处截断为 0 处的正态分布进行采样?
    while x <=0 || x > 1

    x = 0.5 + 0.1*randn();

    end

最佳答案

使用 MATLAB 的 Probability Distribution Objects使得从截断分布中采样变得非常容易。

您可以使用 makedist() truncate() 函数来定义对象然后修改(截断它)为 random() 准备对象允许从中生成随机变量的函数。

% MATLAB R2017a
pd = makedist('Normal',0.5,0.1)     % Normal(mu,sigma)
pdt = truncate(pd,0,1)              % truncated to interval (0,1)
sample = random(pdt,numRows,numCols)  % Sample from distribution `pdt`

一旦创建了对象(这里是 pdtpd 的截断版本),您可以在各种函数调用中使用它。

生成样本 , random(pdt,m,n)pdt 生成 m x n 样本数组.

此外,如果您想避免使用工具箱,this answer from @Luis Mendo是正确的(证明如下)。

Comparison of @Luis Mendo code results with theoretical results
figure, hold on
h = histogram(cr,'Normalization','pdf','DisplayName','@Luis Mendo samples');
X = 0:.01:1;
p = plot(X,pdf(pdt,X),'b-','DisplayName','Theoretical (w/ truncation)');

关于matlab - 从截断的正态分布中绘制伪随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18099201/

相关文章:

matlab - 如何切割树状图并在地理 map 上表示

matlab - 我的观察结果小于每个的特征向量。有什么解决方案可以克服这个问题吗?

matlab - 在 Matlab 中生成多元正态分布的随机数

mvtnorm::pmvnorm 的 Rcpp 实现比原始 R 函数慢

r - 正态分布范围之间列的概率

python - 使用 urlencode、urlopen 上传文件 - 除非之后调用 post.read(),否则文本会被截断?

matlab - 通过交换行和列来重新排列稀疏数组

matlab - 计算物体外切半径和内切半径 - Matlab

java - 截断/紧凑 PDF417 矩阵

Twitter API 通过添加 URL 截断推文