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

ARA*_*RAT 0 random matlab 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))
Run Code Online (Sandbox Code Playgroud)

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

Sue*_*ver 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
Run Code Online (Sandbox Code Playgroud)

如果两个数组具有不同的值,但是想知道为什么这些方法不相同而且它们与所需的平均值无关,那就好了,这是因为你只使用了20个样本,这些样本对分布和不太可能对平均值产生实际估计.如果将样本数量增加到几千个,您将看到均值会收敛到所需的平均值.

sigma = 50; 
n = 10000;

rng(0,'twister');

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

mean(normrnd(10,sigma,n,1))
%   9.8998
Run Code Online (Sandbox Code Playgroud)