标签:随机数 class www 产生 方法 sum http i++ sigma
产生正态分布\(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文件参见均匀分布的随机数
标签:随机数 class www 产生 方法 sum http i++ sigma
原文地址:https://www.cnblogs.com/liam-ji/p/11624215.html