randn
正态分布的伪随机数
语法
r = randn(n)
randn(m,n)
randn([m,n])
randn(m,n,p,...)
randn([m,n,p,...])
randn(size(A))
r = randn(..., 'double')
r = randn(..., 'single')
描述
r=randn(n)返回一个n*n的矩阵,包含了从标准正态分布中得到的伪随机数。randn(m,n)或者randn([m,n])返回一个m*n的矩阵。randn(m,n,p,...)或者randn([m,n,p,...])返回一个m*n*p*...的多维矩阵。randn返回一个标量,randn(size(A))返回一个和A有同样大小的数组。
r=randn(...,'double')或者r=randn(...,'single')返回一个指定类型的正态值向量。
注意:输入的尺寸m,n,p,...应该是非负的整数。0认为是负整数。
由randn产生的数字序列是由rand、randi、randn之下的统一伪随机数发生器的内部状态决定的。 randn使用从那个默认流中来的一个或多个统一值来产生每一个正态值的。使用这个默认流的性质和方法来控制它。查看@RandStream获取更多关于默认流的信息。
重置默认流到同一个固定的状态可以让计算得到重复。设置这个流到不同的状态将导致独立的计算。但是,它并不能提高任何统计特性。因为这个随机数产生器会在Matlab每次启动的时候初始化到同一个状态。rand、randn、randi将会产生同样的数字序列直到状态发生了改变。
注意:在Matlab 7.7之前,你可以在调用randn的时候使用‘seed’或者‘state’关键词来控制随机数流的内部状态。这个参数因为后向兼容性还是可以支持的,但我们不赞成使用它。对于版本7.7,使用在@RandStream参考文档的中描述的默认流。
例子
产生一个符合期望为1标准差为2的正态分布序列
r=1+2.*randn(100,1);
使用指定的期望向量和相关矩阵,产生一个符合二元正态分布的序列
mu = [1 2];
Sigma = [1 .5; .5 2]; R = chol(Sigma);
z = repmat(mu,100,1) + randn(100,2)*R;
Replace the default stream at MATLAB startup, using a stream whose seed is based on clock, so that randn will return different values in different MATLAB sessions. It is usually not desirable to do this more than once per MATLAB session.
RandStream.setDefaultStream
(RandStream('mt19937ar','seed',sum(100*clock)));
randn(1,5)
Save the current state of the default stream, generate 5 values, restore the state, and repeat the sequence.
defaultStream = RandStream.getDefaultStream;
savedState = defaultStream.State;
z1 = randn(1,5)
defaultStream.State = savedState;
z2 = randn(1,5) % contains exactly the same values as z1