正態分佈的隨機數

1、功能

產生正態分佈\(N(\mu, \ \sigma^2)\)html

2、方法簡介

正態分佈的機率密度函數爲
\[ f(x)=\frac{1}{\sqrt{2\pi}\sigma}e^{-(x-\mu)^{2}/2\sigma^{2}} \]
一般用\(N(\mu, \ \sigma^2)\)表示。式中\(\mu\)是均值,\(\sigma^2\)是方差。正態分佈也稱爲高斯分佈。編程

\(r_{1}, \ r_{2}, \ ..., \ r_{n}\)爲(0,1)上\(n\)個相互獨立的均勻分佈的隨機數,因爲\(E(r_{i})=\frac{1}{2}\)\(D(r_{i})=\frac{1}{12}\),根據中心極限定理可知,當\(n\)充分大時
\[ x=\sqrt{\frac{12}{n}}\left ( \sum_{n}^{i=1}r_{i}-\frac{n}{2} \right ) \]
的分佈近似正態分佈\(N(0, \ 1)\)。一般取\(n=12\),此時有
\[ x=\sum_{12}^{i=1}r_{i}-6 \]
最後,再經過變換\(y=\mu+\sigma x\),即可獲得均值\(\mu\)、方差爲\(\sigma^2\)的正態分佈隨機數\(y\)函數

3、使用說明

使用C語言編程生成正態分佈函數\(N(0, \ 1)\)spa

/************************************
    a       ---給定區間下限
    b       ---給定區間上限
    seed    ---隨機數種子
************************************/
#include "uniform.c"

double gauss(double mean, double sigma, long int *s)
{
    int i;
    double x;
    double y;

    for(x = 0, i = 0; i < 12; i++){
        x += uniform(0.0, 1.0, s);
    }
    x = x - 6.0;
    y = mean + x * sigma;
    return(y);
}

uniform.c文件參見均勻分佈的隨機數code

相關文章
相關標籤/搜索