QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 14054|回复: 3
打印 上一主题 下一主题

matlab生成的随机数是真正随机的吗?

[复制链接]
字体大小: 正常 放大
retin        

25

主题

5

听众

679

积分

升级  19.75%

该用户从未签到

新人进步奖

跳转到指定楼层
1#
发表于 2005-8-3 23:26 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

8 [* N1 E' y+ N9 R' U

随机数序列在数值分析和概率统计中占有非常重要的地位,因为使用蒙特卡罗模拟方法的前提就是要求很多足够多的,真正的随机数。matlab是基于某种算法,通过rand函数来产生随机数的。从随机数的定义看,rand函数产生的序列不是随机数,是伪随机数。但我们在使用蒙特卡罗模拟方法算法时,不可能成千上万次的去投掷硬币来产生随机数,所以要考察matlab产生的伪随机数能不能当随机数使用。

4 x1 n" J( C% o P1 M @& g/ i* A

考察的方法是:

1 U. G) n& \! S3 Y

1:利用rand函数产生200个伪随机数,分别统计出有多少个伪随机数小数点后的5位数字中奇数出现的频数为0,有多少个伪随机数小数点后的5位数字中奇数出现的频数为1,有多少个伪随机数小数点后的5位数字中奇数出现的频数为2,一直统计到有多少个伪随机数小数点后的5位数字中奇数出现的频数为5。 这样就获得一个包含6个元素的行向量s,其元素依次为小数点后5位包含奇数个数为0或1或2……或5的伪随机数的个数。

' [ M( C2 {9 u2 R; D

2:给出两组源于实际观测的数据。一组是记录某个医院相继出生的1000个婴儿的随机序列,记5个连续出生的婴儿为一组,这样共有200组,统计分别含有0,1,2……5个男婴的组数,获得向量a;另一组是从一个装有500黑球和500个白球的口袋里,每次有放回的抽取一个球,供抽取1000次,记连续抽样5次为一组,这样共有200组,统计分别含有0,1,2……5个白球的组数,获得向量b。

, a/ h! B2 L, Z; q

3:对向量a,b,s进行自由度为5卡方检验,分别获得以向量a,b,s为代表的三组数据的χ2值。

! \& R5 P- J0 d1 ?+ ]1 J/ \3 {6 L- O

4:将上述步骤重复1000次,每次向量a,b都是不变的,但每次的s向量都不同。

5 V/ I) a5 I0 j* S$ ]; @

5:计算1000组s对应的1000个χ2值的最大值,最小值,平均值,对1000组a,b同样如此。

! c! U* i. l/ F" n1 [& O

6:如果假设显著水平为0.05,那么自由度为5的χ2分布临界值是11.1,所以还要计算1000组s对应的1000个χ2值中大于11.1的数值所占的分率。

. G* z. u; ]4 G( m1 w, `$ J

总结果如下:

2 Y2 L- E. i/ q( d7 q

a b s(基于matlab)

* D* M- E* h9 b( w [/ K- l

平均值:2.2240 5.0400 5.0038

) A8 t* a" h5 o4 g- q2 m1 U


最大值:2.2240 5.0400 19.3760

; Q m3 H D- W* O


最小值: 2.2240 5.0400 0.2560

+ O4 l2 B. x- w$ z* v; V

1000个χ2值中大于11.1的数值所占的分率

& D1 {( @3 T% @1 T

x = 0.0520

, J4 T) t% u. E4 D/ \2 d$ H

从平均值的计算结果看,matlab产生的伪随机数的随机程度和从口袋摸球相当,所以随机性满足要求。

1 B% D8 ~% l, J

从最大值结果看,基于matlab的伪随机序列产生的χ2值最大达到19.3760,大于显著水平0.05,自由度为5的χ2分布的临界值,似乎有些序列不够随机。但考虑到χ2分布中,总有0.05的概率,使得χ2值大于11.1,所以验算了基于matlab的伪随机序列产生的χ2值中大于11.1的数值占的分率,这个分率是0.0520,非常接近0.05。

/ z+ t* U6 p: V0 n% X

所以,matlab产生的伪随机序列可以作为真正的随机序列使用。

# s0 D+ l3 F2 m3 E. W E

matlab程序如下:

, D8 l6 P& }, n9 j i
6 B- h8 W4 F( s! A4 I( k

clear
rr=[];
for l=1:1000
p=[];
rand(\'seed\',prod(clock))
r=fix(rand(200)*100000);
for i=1:length(r)
m=r(i); s=[];
for j=1:5
s=[s rem(m,10)];
m=round((m-rem(m,10))/10);
end
p=[p;s];
end
s=zeros(1,6);
for i=1:size(p,1)
k=length(find(rem(p(i,,2*ones(1,size(p,2)))));
s(k+1)=s(k+1)+1;
end
a=[5 27 64 65 30 9];
b=[4 34 65 70 22 5];
c=[];
for i=0:5
p=combine_m(5,i)*0.5^i*0.5^(5-i);
c=[c 200*p];
end
ka2=sum([([a;b;s]-[c;c;c]).^2./[c;c;c]]\');
rr=[rr;ka2];
end
ave=mean(rr)
mx=max(rr)
mi=min(rr)
x=length(find(rr(:,3)>11.1))/length(rr(:,3))

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
aslixp        

1

主题

2

听众

46

积分

升级  43.16%

  • TA的每日心情
    开心
    2011-8-28 13:29
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    新人进步奖

    回复

    使用道具 举报

    风三少        

    0

    主题

    0

    听众

    18

    积分

    升级  13.68%

    该用户从未签到

    新人进步奖

    听你分析好像是对的。

    - g$ s& ?( N2 a5 C! v4 S

    但为什么都说计算机无法产生真正的随机数?

    回复

    使用道具 举报

    2

    主题

    2

    听众

    168

    积分

    升级  34%

    该用户从未签到

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-12 09:40 , Processed in 0.451872 second(s), 74 queries .

    回顶部