gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 00:41:41 27 4
gpt4 key购买 nike

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/

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