正态分布的随机数
Posted liam-ji
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正态分布的随机数相关的知识,希望对你有一定的参考价值。
一、功能
产生正态分布\\(N(\\mu, \\ \\sigma^2)\\)。
二、方法简介
正态分布的概率密度函数为
\\[
f(x)=\\frac1\\sqrt2\\pi\\sigmae^-(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)=\\frac12\\),\\(D(r_i)=\\frac112\\),根据中心极限定理可知,当\\(n\\)充分大时
\\[
x=\\sqrt\\frac12n\\left ( \\sum_n^i=1r_i-\\fracn2 \\right )
\\]
的分布近似正态分布\\(N(0, \\ 1)\\)。通常取\\(n=12\\),此时有
\\[
x=\\sum_12^i=1r_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文件参见均匀分布的随机数
以上是关于正态分布的随机数的主要内容,如果未能解决你的问题,请参考以下文章
(多元)偏正态分布正态分布对数正态分布的随机数的产生(R语言)