MATLAB的伪随机数生成器有多随机?

时间:2017-12-12 16:27:48

标签: matlab random

我在MATLAB的文档中读到他们使用Mersenne Twister作为他们的rand()和randi()函数。

我写了一些示例代码来测试随机性:

rng('shuffle'); 
rand_arr = zeros(10, 10);
for i=1:10
    rand_arr(i,:) = randi(800, 1, 10);
end

uncollided = 0;
for p=1:10
    if length(rand_arr(:,p)) == length(unique(rand_arr(:,p)))
        uncollided = uncollided + 1;
    end
end

disp(uncollided/10);

一组10个数字的非组合数最终平均为95%,这似乎太低了。当我减少randi()的宇宙时,它会变得更糟。我认为Mersenne Twister会有更好的价值观。是否有更“随机”的发电机?

我正在使用MATLAB v2017。

感谢。

1 个答案:

答案 0 :(得分:0)

哎呀,这只是一个错误的计算。对于那些好奇的人,计算是这样的:

800! /(790!*(800 10 ))〜。945

关于哪个是最好的随机数发生器的问题仍然存在。