c語言 產生標準正態分佈或高斯分布 隨機數
產生正態分佈或高斯分布的三種方法:
1. 運用中心極限定理(大數定理)
1 #include2.利用有box 和 muller 提供的,在 knuth的網上討論過的方法 (比較常用的方法)2 #include
3 4 #define nsum 25
5 6 double gaussrand()
7 14
15 x -= nsum / 2.0;
16 x /= sqrt(nsum / 12.0);
17 18 return x;
19 }
box-muller,一般是要得到服從正態分佈的隨機數,
基本思想: 先得到服從均勻分布的隨機數; 然後再將服從均勻分布的隨機數轉變為服從正態分佈.
box-muller 是產生隨機數的一種方法。box-muller 演算法隱含的原理非常深奧,但結果卻是相當簡單。
如果在 (0,1] 值域內有兩個一致的隨機數字 u1 和 u2,
可以使用以下兩個等式中的任乙個算出乙個正態分佈的隨機數字 z:
z = r * cos( θ ) 或 z = r * sin( θ )
其中, r = sqrt(-2 * ln(u2)), θ = 2 * π * u1
正態值 z 有乙個等於 0 的平均值和乙個等於 1 的標準偏差,可使用以下等式將 z 對映到乙個平均值為 m、標準偏差為 sd 的統計量 x:
x = m + (z * sd)
c**: (計算機程式設計中, log函式==ln()函式,以e為底的自然對數, log10 才是以10為底的函式)
1 #include 2 #include 3 #define pi 3.141592654doublec++**:doublegaussrand( )4
15 else
16
19 20 phase = 1 - phase;
21 retrn z;
22 }
1 #include 2 #include 3 #include 4 double generategaussiannoise(double mu, double sigma)3 使用最初有marsaglia 提供的方法5 22 while ( u1 <= epsilon );
23 24 z0 = sqrt(-2.0 * log(u1)) * cos(two_pi * u2);
25 z1 = sqrt(-2.0 * log(u1)) * sin(two_pi * u2);
26 return z0 * sigma + mu;
27 }
1 #include 2 #include 3 double gaussrand()參考:4 while( s >= 1 || s ==0)
19
20 x = v1 * sqrt (-2 * log(s) / s);
21 }
22 else
23
26 27 phase = 1 - phase;
28 return x;
29 }
C語言產生標準正態分佈或高斯分布隨機數
c語言 產生標準正態分佈或高斯分布 隨機數 產生正態分佈或高斯分布的三種方法 1.運用中心極限定理 大數定理 1 include 2 include 34 define nsum 2556 double gaussrand 714 15 x nsum 2.0 16 x sqrt nsum 12.0 ...
Python資料視覺化實現正態分佈(高斯分布)
正態分佈 normal distribution 又成為高斯分布 gaussian distribution 若隨機變數x服從乙個數學期望為 標準方差為 的高斯分布,記為 則其概率密度函式為 正態分佈的期望值 決定了其位置,其標準差 決定了分布程式設計客棧的幅度。因其曲線呈鐘形,因此人們又經常稱之為...
randn 產生正態分佈的隨機數或矩陣的函式
randn 產生均值為 0,方差 2 1 標準差 1的正態分佈的隨機數或矩陣的函式。用法 y randn n 返回乙個 n n的隨機項的矩陣。如果 n不是個數量,將返回錯誤資訊。y randn m,n 或y randn m n 返回乙個 m n的隨機項矩陣。y randn m,n,p,或y rand...