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
我不知道怎么描述这个问题所以就这样命名了。如果您有更好的想法,请修复它。我提前道歉。
我在使用 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