系统仿真(二)


一、题目

利用第二次作业撰写的均匀随机数生成器,生成第一次作业中拟合的随机分布,并完成其分布检验。

二、任务目标

第一次作业我们通过调查问卷的形式,统计了学生们起床时间点和起床耗时时间,然后做了分布拟合。对于起床时间点(不分男女),其分布大致符合的正态分布。这里的数值对应起床时间段为:

1 2 3 4 5 6 7
6:30以前 6:30-6:40 6:40-6:50 6:50-7:00 7:00-7:10 7:10-7:20 7:20-7:30
8 9 10 11 12 13
7:30-7:40 7:40-7:50 7:50-8:00 8:00-8:10 8:10-8:20 8:20-8:30

同时,第二次作业我们通过CMRG生成器生成了均匀分布的随机数,现在我们将利用CMRG生成器,通过Box Muller 法生成服从的随机变量。

三、生成随机数

1、生成两组独立的均匀分布随机变量

在上次作业中我们已经通过CMRG生成器完成了均匀分布随机数的生成并通过了检验。在Box Muller 法中,我们需要两组独立的均匀分布随机变量,通过置不同的初始值达到以上目的,代码如下:

%生成随机数的个数
N = 100000*3;
%m1,m2
m1=2.^32-209;m2=2.^32-22853;
%z1系数
a1=1403580;a2=810728;
%z2系数
b1=527612;b2=1370589;
%u1
z11=2637242579;z12=1747669293;z13=2112977067;
z21=2633436652;z22=3518603782;z23=229738972;
u1=zeros(1,N);
for i=1:N
    z1_i=mod(a1*z12-a2*z11,m1);
    z2_i=mod(b1*z22-b2*z21,m2);
    y=mod(z1_i-z2_i,m1);
    z11=z12;
    z12=z13;
    z13=z1_i;
    z21=z22;
    z22=z23;
    z23=z2_i;
    u1(1,i)=y./m1;
end
%u2
z11=2000296842;z12=2952722757;z13=1488858363;
z21=1878479796;z22=3478083987;z23=3429948804;
u2=zeros(1,N);
for i=1:N
    z1_i=mod(a1*z12-a2*z11,m1);
    z2_i=mod(b1*z22-b2*z21,m2);
    y=mod(z1_i-z2_i,m1);
    z11=z12;
    z12=z13;
    z13=z1_i;
    z21=z22;
    z22=z23;
    z23=z2_i;
    u2(1,i)=y./m1;
end

2、Box Muller法生成正态分布随机变量

因分布函数在极坐标下有封闭形式,可采用反变换法,其在极坐标下的反函数形式如下:

image-20210419023551627

%生成正态分布随机变量xnorm
mu = 7.11321;
sigma = 2.30661;
r = sqrt(-2*log(u2));
theta = 2*pi*u1;
x = r.*cos(theta);
xnorm = repmat(mu, 1, N) + sigma*x;
figure
hold on;
histogram(xnorm,100,'Normalization','pdf')
%正态分布曲线
x=-2:.01:18;
norm=normpdf(x,7.11321,2.30661);
plot(x,norm)

生成的随机变量pdf如下,和正态分布曲线基本拟合。

image-20210419025233516

四、分布检验

1、K-S检验

kstest =

    'kstest pass'

2、Q-Q图检验

image-20210419032610210

生成的正态分布分位数与正态分布的分位数为明显线性关系,表明生成的随机变量符合正态分布。

3、检验部分代码

%K-S检验
pd = makedist('normal','mu',mu,'sigma',sigma);
h=kstest(xnorm,pd);
if h
    kstest='kstest fail'
else
    kstest='kstest pass'
end
%pdf检验

%Q-Q图
figure(1)
subplot(1,2,1)
hist(xnorm,100)
subplot(1,2,2)
qqplot(xnorm)
subplot(1,2,3)

五、总结

通过Box Muller法生成的正态分布随机变量符合正态分布。另外,生成的随机变量可通过文章开始的表格进行映射,最终得到的起床时间点为整数部分映射的开始时间+小数部分*10(分钟),如抽样一个随机变量为7.25,其对应起床时间为7:20+0.25 X 10 = 7:22分30秒。


文章作者: Liuss
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Liuss !
评论
  目录