线性同余法

1、 线性同余方法是目前应用广泛的伪随机数生成算法,其基本思想是通过对前一个数进行线性运算并取模从而得到下一个数,递归公式为:

xn+1=(axn+c)  mod(m) x n + 1 = ( a x n + c )     m o d ( m )
yn+1=xn+1/m y n + 1 = x n + 1 / m

其中a称为乘数,c称为增量,m称为模数,当a=0时为和同余法,当c=0时为乘同余法,c≠0时为混合同余法。 乘数、增量和模数的选取可以多种多样,只要保证产生的随机数有较好的均匀性和随机性即可,一般采用 m=2k m = 2 k 混合同余法。
线性同余法的最大周期是m,但一般情况下会小于m。要使周期达到最大,应该满足以下条件:
(1) c和m互质;
(2) m的所有质因子的积能整除a-1;
(3) 若m是4的倍数,则a-1也是;
(4) a,c, x0 x 0 (初值,一般即种子)都比m小;
(5) a,c是正整数。
线性同余方法速度快,如果对乘数和模数进行适当的选择,可以满足用于评价一个随机数产生器的3 种准则:
(1)这个函数应该是一个完整周期的产生函数。也就是说,这个函数应该在重复之前产生出0 到m之间的所有数;
(2)产生的序列应该看起来是随机的;
(3)这个函数应该用32bit 算术高效实现。

2、例子:运用混合同于法生成1000个[0,1]内的均匀分布随机数

function A=fangzheng3(a,c,m,x)
A=zeros(1000,1);
n=1;
while n<=1000
    n=n+1;
    x=rem((a*x+c),m);  %%rem(x,y):求整除x/y的余数
    y=x/m;
    A(n-1,1)=y;
End

运行:A=fangzheng3(97,3,1000,71),得到部分结果

序号

随机数

序号

随机数

序号

随机数

序号

随机数

序号

1

0.89

101

0.39

201

0.89

301

0.39

401

2

0.333

102

0.833

202

0.333

302

0.833

402

3

0.304

103

0.804

203

0.304

303

0.804

403

4

0.491

104

0.991

204

0.491

304

0.991

404

5

0.63

105

0.13

205

0.63

305

0.13

405

6

0.113

106

0.613

206

0.113

306

0.613

406

7

0.964

107

0.464

207

0.964

307

0.464

407

8

0.511

108

0.011

208

0.511

308

0.011

408

9

0.57

109

0.07

209

0.57

309

0.07

409

10

0.293

110

0.793

210

0.293

310

0.793

410

11

0.424

111

0.924

211

0.424

311

0.924

411

12

0.131

112

0.631

212

0.131

312

0.631

412

13

0.71

113

0.21

213

0.71

313

0.21

413

14

0.873

114

0.373

214

0.873

314

0.373

414

15

0.684

115

0.184

215

0.684

315

0.184

415

16

0.351

116

0.851

216

0.351

316

0.851

416

17

0.05

117

0.55

217

0.05

317

0.55

417

18

0.853

118

0.353

218

0.853

318

0.353

418

19

0.744

119

0.244

219

0.744

319

0.244

419

这里写图片描述
对生成的随机数进行一般的统计量进行计算,计算出生成随机数的均值和方差以及标准差,matlab程序如下:

sum=0;
for n=1:1000
    sum=sum+A(n,1);
end
Avg=sum/1000 %计算其均值
s=0;
for n=1:1000
    s=s+(A(n,1)-Avg)^2;
end
S=s/(1000-1)   %计算其方差
Stdv=S^0.5     %计算其标准差

得到:
Avg = 0.4995
S = 0.0834
Stdv = 0.2888
可以看出,生成的均匀分布随机数是均值为0.5,标准差在0.3左右。m越大均值越接近1/2,方差越接近1/12。

  • 23
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值