正态分布,Matlab中的最小值

时间:2017-06-27 10:49:37

标签: matlab normal-distribution

我试图通过normrnd函数在正态分布中生成1000个随机值。

 A = normrnd(4,1,[1000 1]);

我想将最小值设置为2.但是,该函数只能定义均值和sd。如何设置最小值为2?

3 个答案:

答案 0 :(得分:0)

你做不到。高斯或正态分布的数字呈钟形曲线,尾部拖尾无穷大。你可以做的是通过消除截止之外的每一个数字来“审查”它们。

答案 1 :(得分:0)

由于你选择mean = 4和sigma = 1,你最终会得到〜95%的A元素落在范围[2,6]之内。值小于2的元素数量约为2.5%。如果您认为此数字很小,则可以将这些元素包装到最小值。例如:

 A = normrnd(4,1,[1000 1]);

A_before

A(A < 2) = A(A<2) + 2 - min(A(A<2))

A_after

当然,技术上不是高斯分布。但是,如果你完全控制了均值和西格玛,你可以得到一个更像高斯的&#34;通过向A:

添加偏移量来进行分配
A = A + 2 - min(A) 

答案 2 :(得分:0)

注意:这假设你可以有任意设定的标准偏差,可能不是这种情况

正如其他人所说,你不能指定真正高斯的下界。但是,您可以生成高斯值并估算1-p%的值,然后忽略p%的值(这将超出截止值)。

例如,在下面的代码中,我生成一个高斯,其中95%的数据点高于2.然后我删除了2以下的所有点,知道将删除5%的数据。

这是解决方案,因为设置为p接近于零,您获得跟随高斯曲线并且完全高于截止值的未经审查的样本数据的几率达到100%(实际上它由p/n比率n,但如果n = 1000; % number of samples cutoff = 2; % Cutoff point for min-value mu = 4; % Mean p = .05; % Percentile you would like to cutoff z = -sqrt(2) * erfcinv(p*2); % compute z score sigma = (cutoff - mu)/z; % compute standard deviation A = normrnd(mu,sigma,[n 1]); 已修复,则为真。)

A(A<cutoff) = []; % removes all values of A less than cutoff

我建议删除低于截止值的值,而不是将它们重新归因于您的分布的下限,但这取决于您。

A(A>(2*mu-cutoff)) = []; 

如果你想要对称(你应该防止样本歪斜),下面的工作应该有效。

par