线性同余法
1、 線性同余方法是目前應(yīng)用廣泛的偽隨機(jī)數(shù)生成算法,其基本思想是通過(guò)對(duì)前一個(gè)數(shù)進(jìn)行線性運(yùn)算并取模從而得到下一個(gè)數(shù),遞歸公式為:
其中a稱為乘數(shù),c稱為增量,m稱為模數(shù),當(dāng)a=0時(shí)為和同余法,當(dāng)c=0時(shí)為乘同余法,c≠0時(shí)為混合同余法。 乘數(shù)、增量和模數(shù)的選取可以多種多樣,只要保證產(chǎn)生的隨機(jī)數(shù)有較好的均勻性和隨機(jī)性即可,一般采用m=2km=2k混合同余法。
線性同余法的最大周期是m,但一般情況下會(huì)小于m。要使周期達(dá)到最大,應(yīng)該滿足以下條件:
(1) c和m互質(zhì);
(2) m的所有質(zhì)因子的積能整除a-1;
(3) 若m是4的倍數(shù),則a-1也是;
(4) a,c,x0x0(初值,一般即種子)都比m小;
(5) a,c是正整數(shù)。
線性同余方法速度快,如果對(duì)乘數(shù)和模數(shù)進(jìn)行適當(dāng)?shù)倪x擇,可以滿足用于評(píng)價(jià)一個(gè)隨機(jī)數(shù)產(chǎn)生器的3 種準(zhǔn)則:
(1)這個(gè)函數(shù)應(yīng)該是一個(gè)完整周期的產(chǎn)生函數(shù)。也就是說(shuō),這個(gè)函數(shù)應(yīng)該在重復(fù)之前產(chǎn)生出0 到m之間的所有數(shù);
(2)產(chǎn)生的序列應(yīng)該看起來(lái)是隨機(jī)的;
(3)這個(gè)函數(shù)應(yīng)該用32bit 算術(shù)高效實(shí)現(xiàn)。
2、例子:運(yùn)用混合同于法生成1000個(gè)[0,1]內(nèi)的均勻分布隨機(jī)數(shù)
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的余數(shù)y=x/m;A(n-1,1)=y; End運(yùn)行:A=fangzheng3(97,3,1000,71),得到部分結(jié)果
| 序號(hào) | 隨機(jī)數(shù) | 序號(hào) | 隨機(jī)數(shù) | 序號(hào) | 隨機(jī)數(shù) | 序號(hào) | 隨機(jī)數(shù) | 序號(hào) |
| 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 |
對(duì)生成的隨機(jī)數(shù)進(jìn)行一般的統(tǒng)計(jì)量進(jìn)行計(jì)算,計(jì)算出生成隨機(jī)數(shù)的均值和方差以及標(biāo)準(zhǔn)差,matlab程序如下:
得到:
Avg = 0.4995
S = 0.0834
Stdv = 0.2888
可以看出,生成的均勻分布隨機(jī)數(shù)是均值為0.5,標(biāo)準(zhǔn)差在0.3左右。m越大均值越接近1/2,方差越接近1/12。
總結(jié)
- 上一篇: 基于YOLOv5的车辆识别系统
- 下一篇: QR码与DM码的对比