我的目标是使用MATLAB在一个圆圈中绘制一些随机数。我的代码:
c = 3; p = 31; x = [7];
% generating random numbers (z) in the range [0,1) using
% congruential random number generator (multiplicative)
for i = 2:200;
x(i) = mod(c*x(i-1),p);
end;
z = x/p;
% plot unit circle
hold on;
theta = 0:pi/50:2*pi;
plot(cos(theta),sin(theta),'.');
hold off;
% plotting random points in the unit circle using in-built rand function
phi = 2*pi*rand(1,200);
r = 1*sqrt(rand(1,200));
% plotting random points using the RNG above
% phi = 2*pi*z;
% r = 1*sqrt(z);
hold on;
x = 0 + r.*cos(phi);
y = 0 + r.*sin(phi);
plot(x,y,'r*');
hold off;
clear;
我面临的问题是z
和rand
都包含[0,1]范围内的随机数。但是,当我使用rand
绘图时,我得到了理想的结果 -
可能是什么问题?
答案 0 :(得分:3)
除了Ander关于RNG的好处之外,还存在对z
和phi
使用r
的问题。使用z=rand(200,1)
进行检查,然后创建绘图:
给出与之前相同的结果。如果你让z
两者都不同,那么你在RNG中会得到“真实”的随机性。我用过这个RNG:
c = 991;
p = 997;
x=zeros(400,1);
x(1,1) = 7;
for ii = 2:400;
x(ii,1) = mod(c*x(ii-1),p);
end;
z = x/p;
phi2 = 2*pi*z(1:200,1);
r2 = 1*sqrt(z(201:400,1));
我让你的RNG运行一段时间,然后将前200个用于phi
,将最后200个用于r
:
正如你所看到的,仍有某种漩涡可见,但这是由你的RNG造成的。您选择的c
和p
越大,就越少。
通过设置c=3
和p=31
以及如上所述使用完整的400 z
范围来向您展示您的RNG变得多么漂亮。这不是一个伟大的漩涡吗?
答案 1 :(得分:2)