随机数与区间matlab中的高斯分布

时间:2017-03-23 12:11:30

标签: matlab

如何在Matlab的间隔中创建一个正态分布的整数随机数?任何人都可以提供答案吗?

我知道如何用正态分布创建一个随机数,比如说y,

std = 5;
mean = 500;
y = std.*randn + mean;

但它不是整数,也不是特定的间隔

3 个答案:

答案 0 :(得分:0)

从大二N的二项式(N,0.5)分布中选择数字。这将产生一些尽可能接近“整数正态分布”的东西。平均值为N / 2,标准偏差为N / 4。减去N / 2使其以0为中心。

说N = 100.然后生成样本,你可以这样做:

k = sum(randi(2, [100,1]) - 1);

或:

k = sum(rand(100,1) < 0.5);

答案 1 :(得分:0)

您可以使用randn并通过舍入输出数字转换为整数。重复,直到数字在您感兴趣的[a,b]范围内。 它可能适用于中间足够宽的范围,但是当你想要看到尾部的狭窄部分时,你会做很多尝试。

其他选项是从概率相等的任何范围获取任何整数,并将其转换为您范围内的高斯类。假设数字0-> 10将成为a,11-50将是+ 1 ... maxint-10:maxint将是b。

答案 2 :(得分:0)

如果你想要整数,你可以使用randn并对数字进行舍入。但是,你的第二个问题有点奇怪。

正态分布没有明确的区间。您只能定义一个&#34;置信区间&#34;在平均值附近。例如,99.7%的分布包含在距平均值3个标准偏差内。但这并不意味着你有一个严格的间隔,这意味着看到超过3xStandard偏差的数字的概率太低了。让我们说我生成10000个数字,其中mean = 100,std.deviation = 10并舍入它们。然后我希望看到70到130之间的数字。可能有超过这个间隔的数字,但它们的频率(〜概率)会很低。

mu=100; sigma=10; figure,hist(round(normrnd(mu,sigma,10000,1)),100)

enter image description here