【问题标题】:normrnd of MATLAB generating different values for the same settingMATLAB 的 normrnd 为相同的设置生成不同的值
【发布时间】:2017-02-09 05:50:43
【问题描述】:

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

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

【问题讨论】:

  • 当您只使用 20 个数据点时,您如何期望均值相同?这是对您的分布进行采样不足的方式。尝试 10,000 点。

标签: matlab random normal-distribution mersenne-twister


【解决方案1】:

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

【讨论】:

  • 我知道采样不足,但我在循环中使用了生成器。我现在完全明白了!太感谢了!我很感激!
猜你喜欢
  • 2015-06-12
  • 2015-01-30
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多