Matlab 从截断正态分布中提取伪随机数

Matlab 从截断正态分布中提取伪随机数,matlab,normal-distribution,truncated,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 而x 1 x=0.5+0.1*randn(); 结束 为什么不矢量化?它可能会更快: N = 1e5; % desired nu

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
而x 1
x=0.5+0.1*randn();
结束

为什么不矢量化?它可能会更快:

N = 1e5; % desired number of samples
m = .5; % desired mean of underlying Gaussian
s = .1; % desired std of underlying Gaussian
lower = 0; % lower value for truncation
upper = 1; % upper value for truncation

remaining = 1:N;
while remaining
    result(remaining) = m + s*randn(1,numel(remaining)); % (pre)allocates the first time
    remaining = find(result<=lower | result>upper);
end
N=1e5;%所需样本数
m=.5;%下垫高斯分布的期望平均值
s=.1;%下垫高斯分布的期望标准差
下限=0;%截断的下限值
上限=1;%截断上限值
剩余=1:N;
剩下的
结果(剩余)=m+s*randn(1,numel(剩余));%(预)分配第一次
剩余=查找(resultupper);
结束

为什么不矢量化?它可能会更快:

N = 1e5; % desired number of samples
m = .5; % desired mean of underlying Gaussian
s = .1; % desired std of underlying Gaussian
lower = 0; % lower value for truncation
upper = 1; % upper value for truncation

remaining = 1:N;
while remaining
    result(remaining) = m + s*randn(1,numel(remaining)); % (pre)allocates the first time
    remaining = find(result<=lower | result>upper);
end
N=1e5;%所需样本数
m=.5;%下垫高斯分布的期望平均值
s=.1;%下垫高斯分布的期望标准差
下限=0;%截断的下限值
上限=1;%截断上限值
剩余=1:N;
剩下的
结果(剩余)=m+s*randn(1,numel(剩余));%(预)分配第一次
剩余=查找(resultupper);
结束

您需要执行以下步骤 1.从均匀分布中抽取一个随机值,u。 2.假设正态分布在a和b处截断。得到

u_bar = F(a)*u +F(b) *(1-u)
三,。使用F的倒数

epsilon= F^{-1}(u_bar)

ε是截断正态分布的随机值

您需要以下步骤 1.从均匀分布中抽取一个随机值,u。 2.假设正态分布在a和b处截断。得到

u_bar = F(a)*u +F(b) *(1-u)
三,。使用F的倒数

epsilon= F^{-1}(u_bar)
ε是截断正态分布的随机值

使用MATLAB使得从截断分布进行采样变得非常容易

您可以使用和函数定义对象,然后修改(截断)对象以准备函数的对象,该函数允许从对象生成随机变量

% 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`
创建对象后(这里是
pdt
,是
pd
的截断版本),您可以在各种函数调用中使用它

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


此外,如果您希望避免使用工具箱,那么这是正确的(下面的证据)

使用MATLAB使得从截断分布进行采样变得非常容易

您可以使用和函数定义对象,然后修改(截断)对象以准备函数的对象,该函数允许从对象生成随机变量

% 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`
创建对象后(这里是
pdt
,是
pd
的截断版本),您可以在各种函数调用中使用它

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


此外,如果您希望避免使用工具箱,那么这是正确的(下面的证据)


如何声明和计算变量(cr,c crmean)?cr是一个值数组。cr(c)是第c个元素。crMean是一个常数,例如0.5。c是一个循环迭代器。看看是否有统计工具箱。然而,根据您的方法,您的变量(cr,c crmean)是如何声明和计算的是合理的吗?cr是一个值数组。cr(c)是第c个元素。crMean是一个常数,例如0.5。c是一个循环迭代器。看看是否有统计工具箱。然而,根据你的方法是合理的公式从哪里来?请帮忙提供参考!这个公式是从哪里来的?请帮忙提供参考!