日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线性同余法

發(fā)布時間:2024/8/1 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线性同余法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、 線性同余方法是目前應用廣泛的偽隨機數生成算法,其基本思想是通過對前一個數進行線性運算并取模從而得到下一個數,遞歸公式為:

xn+1=(axn+c)  mod(m)xn+1=(axn+c)mod(m) yn+1=xn+1/myn+1=xn+1/m

其中a稱為乘數,c稱為增量,m稱為模數,當a=0時為和同余法,當c=0時為乘同余法,c≠0時為混合同余法。 乘數、增量和模數的選取可以多種多樣,只要保證產生的隨機數有較好的均勻性和隨機性即可,一般采用m=2km=2k混合同余法。
線性同余法的最大周期是m,但一般情況下會小于m。要使周期達到最大,應該滿足以下條件:
(1) c和m互質;
(2) m的所有質因子的積能整除a-1;
(3) 若m是4的倍數,則a-1也是;
(4) a,c,x0x0(初值,一般即種子)都比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<=1000n=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


對生成的隨機數進行一般的統(tǒng)計量進行計算,計算出生成隨機數的均值和方差以及標準差,matlab程序如下:

sum=0; for n=1:1000sum=sum+A(n,1); end Avg=sum/1000 %計算其均值 s=0; for n=1:1000s=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。

總結

以上是生活随笔為你收集整理的线性同余法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。