线性同余法

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。

©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页