我不知道如何描述这个问题所以我这样称呼它。如果您有任何更好的想法,请修复它。我提前道歉。
当我使用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。有没有人对这种情况有任何想法?
答案 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