正態分布的隨機數


一、功能

產生正態分布\(N(\mu, \ \sigma^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\)

三、使用說明

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

/************************************
	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文件參見均勻分布的隨機數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM