线性同余法
1、 線性同余方法是目前應用廣泛的偽隨機數生成算法,其基本思想是通過對前一個數進行線性運算并取模從而得到下一個數,遞歸公式為:
其中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 |
對生成的隨機數進行一般的統計量進行計算,計算出生成隨機數的均值和方差以及標準差,matlab程序如下:
得到:
Avg = 0.4995
S = 0.0834
Stdv = 0.2888
可以看出,生成的均勻分布隨機數是均值為0.5,標準差在0.3左右。m越大均值越接近1/2,方差越接近1/12。
總結
- 上一篇: 基于YOLOv5的车辆识别系统
- 下一篇: matlab 自写 自适应中值滤波 ma