java正态分布随机数_正态分布的随机数

一、功能

产生正态分布\(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文件参见均匀分布的随机数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值