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

normrnd of MATLAB generating different values for the same setting

我不知道怎么描述这个问题所以就这样命名了。如果您有更好的想法,请修复它。我提前道歉。

我在使用 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。有人知道这种情况吗?

如果您希望对 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