MATLAB的normrnd为相同的设置生成不同的值

时间:2016-09-30 15:32:38

标签: matlab random normal-distribution mersenne-twister

我不知道如何描述这个问题所以我这样称呼它。如果您有任何更好的想法,请修复它。我提前道歉。

当我使用MATLAB的普通随机生成器编写代码时,我的问题出现了。

clear all; 
clc; 
close all;
rng(0,'twister');

sigma=50; 
mean(normrnd(10,sigma,20,1))

n=20;
mean(normrnd(10,sigma,n,1))

当我通过将生成器设置为Mersenne Twister并将种子设置为0来控制它时生成20个正态分布的数字时,我可以使用上面提供的代码。我可以在 normrnd 函数中编写样本大小,或者我可以在函数中定义它,但是当你运行它并找到两种方式生成数字的方法时,你也会发布它们差异很大。这样的第一个均值是43.2294,第二个均值是7.1280。有没有人对这种情况有任何想法?

1 个答案:

答案 0 :(得分:5)

如果您希望对normrnd的两次连续调用产生完全相同的值,则需要在调用之间重新初始化随机数生成器

sigma = 50; 
n = 20;

rng(0,'twister');
mean(normrnd(10,sigma,n,1))
%   43.2294

rng(0,'twister');
mean(normrnd(10,sigma,n,1))
%   43.2294

如果您对两个具有不同值的阵列感到满意,但又想知道为什么手段不相同而且它们与所需的平均值不相符,那是因为您'仅使用20个样本,这些样本对分布进行了欠采样,并且不太可能产生对平均值的实际估计。如果您将样本数量增加到几千个,您将看到该方法确实收敛到所需的平均值。

sigma = 50; 
n = 10000;

rng(0,'twister');

mean(normrnd(10,sigma,n,1))
%   10.0830

mean(normrnd(10,sigma,n,1))
%   9.8998