2012-12-12 91 views
4

我想在高斯和均匀分布中使用matlab生成数字。 我知道这个函数randirand()但他们都是正常(高斯)分布。怎样才能生成均匀分布的随机数字?在matlab中使用高斯和均匀分布的随机数

+3

正态分布*是*高斯分布。 – jerad

+1

@zhilevan:我是否在最新的答案中阅读了您的想法? – mmgp

+0

@mmgp,tnx你的注意力,是的,我读过它 – zhilevan

回答

14

为0和1

之间的均匀分布使用randn(dimensions) * sqrt(sigma) + mu用于高斯分布一个均值和方差西格玛使用rand(dimensions)

Uniform Distribution

Normal Distribution

+0

'randnrm' **在matlab 2011中不是有效函数** :( – zhilevan

+0

好的,只是在r2011a上更新和测试。 – chriswynnyk

+0

标准偏差和方差是不同的东西,答案目前是错误的。这里有另一个答案是正确的。 – mmgp

3

编辑器,你已经产生了一个高斯分布的伪随机数。正态分布是它的同义词。

我可以从你的问题得到的唯一其他可能的解释是,你想要的东西意味着!= 0和/或方差!= 1.要做到这一点,只需执行mean + sqrt(var) * randn(X)即可。

+0

pease为**生成数字,** **和另一个** gaussin **分布。 tnx – zhilevan

+2

您需要查看您的书籍或其他来源。你读过我答案的第一句话了吗?它们是同义词,即它们是同一物。 – mmgp

+0

是的,我读了它,我想要2分布,1:高斯(普通),2:统一 – zhilevan

7

randn是产生高斯分布变量(randirand产生均匀分布的变量)的函数。

+0

不,如果你尝试在matlab 2011中帮助'randn'看到这个帮助randn RANDN正态分布的伪随机数。 R = RANDN(N)返回一个N乘N矩阵,其中包含来自标准正态分布的 的伪随机值。 RANDN(M,N)或RANDN([M,N])返回 M乘N矩阵。 RANDN(M,N,P,...)或RANDN([M,N,P,...])返回一个N×P-by -...数组。 RANDN返回一个标量。 RANDN(SIZE(A))返回 与A相同的数组。 注意:大小输入M,N,P ...应为非负整数。 负整数被视为0. – zhilevan

+3

是的。通常意味着“高斯”。正如其他人所说的,你需要rand和randn。 – Pete

+1

@zhilevan:正态分布也称为高斯分布。 – Jonas

4

您可以生成从兰特任何分配()。

例如,假设您想要为rayleigh dist生成100000个样本。要做到这一点的方法是您反转该特定函数的cdf。基本思想是由于cdf必须介于0和1之间我们可以通过输入CDF的值b/W 0和1.找到随机变量的值,所以对于瑞利,这将是

for i = 1:100000 
    data(i) = (2*sigma^2 *(-(log(1 - rand(1,1)))))^.5; 
end 

你可以做高斯分布类似的东西。

+0

在一行中:'sigma = 3; tmp =(2 * sigma^2 *( - (log(1-rand(1e6,1)))))。^。5; hist(tmp,100)'。 – randomatlabuser

2

继Raj的回答:使用箱穆勒变换可以生成独立的标准正态/高斯随机数:

N = 1e6; z = sqrt(-2*log(rand(N, 1))) .* cos(2*pi * rand(N, 1)); figure; hist(z, 100) 
N = 1e6; z = sqrt(-2*log(rand(N, 1))) .* sin(2*pi * rand(N, 1)); figure; hist(z, 100) 

如果你想申请的逆变换法,您可以使用反互补误差函数(erfcinv):

N = 1e6; z = -sqrt(2) * erfcinv(2 * rand(1e6, 1)); figure; hist(z, 100) 

但我希望randn效果更好。