正态分布的随机数

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文件参见均匀分布的随机数

以上是关于正态分布的随机数的主要内容,如果未能解决你的问题,请参考以下文章

正态分布的随机数生成算法

高手进,c语言中如何得到服从正态分布的随机数?

(多元)偏正态分布正态分布对数正态分布的随机数的产生(R语言)

(多元)偏正态分布正态分布对数正态分布的随机数的产生(R语言)

正态分布的随机数

PostgreSQL 16 新特性之正态分布随机数函数