首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

怎么产生正态分布的随机数

2012-03-25 
如何产生正态分布的随机数正态分布的随机数[解决办法]有难度,帮你顶[解决办法]让随机数通过实现正态分布函

如何产生正态分布的随机数
正态分布的随机数

[解决办法]
有难度,帮你顶
[解决办法]
让随机数通过实现正态分布函数。
[解决办法]
void NormalTable(float *FTable, float * fTable,int Length)
/*
生成正态分布函数和正态分布概率密度函数表,表宽度为3倍方差
正态分布函数均值为0,方差为1
FTable: 正态分布函数表
fTable: 正态分布概率密度表
Length: 表的长度
*/

{
int i;
float h; /* 步长 */
float x,temp;
float C;

x=-3;
h= 6.0/Length/2;
FTable[0]=0;
C=1/sqrt(2*3.1415927);
/* 初始参数设置 */

fTable[0]= exp(-x*x/2)*C;
/* 起始点的概率密度 ,exp(-x*x/2)*C为概率密度函数 */

for(i=1;i<Length;i++)
{
x+=h;
temp = exp(-x*x/2)*C;
x+=h;
fTable[i] = exp(-x*x/2)*C;
/* 计算正态分布概率密度函数 */

FTable[i] = FTable[i-1]+(fTable[i-1]+4*temp+fTable[i])*h/3;
/* 辛普森数值积分公式计算正态分布函数 */
}
}

float NormalRNG(float * Gauss_F, int Length)
/*
生成均值为0,方差为1的高斯随机数
Gauss_F: 正态分布函数表,规格如上,可以由NormalTable函数生成
Length: 正态分布函数表的长度
返回值:均值为0,方差为1的高斯分布随机数
*/

{
float RandomNumber;
float temp,h;
int i;

h= 6.0/Length;
/* 正态分布表的步长 */


temp = (float)RNG()/65536;
/*产生一个[0,1)区间内均匀随机数 */

if(temp == 0)
return 0;

for(i=0;i<Length;i++)
{
if(temp<=Gauss_F[i]) /*计算随机数落入正态分布表的哪个区间 */
{
RandomNumber = (-3+h*i)+(temp-Gauss_F[i-1])/(Gauss_F[i]-Gauss_F[i-1])*h;
/* 进行线性差值 */
break;
}
}
return RandomNumber;
}
[解决办法]

探讨
void NormalTable(float *FTable, float * fTable,int Length)
/*
生成正态分布函数和正态分布概率密度函数表,表宽度为3倍方差
正态分布函数均值为0,方差为1
FTable: 正态分布函数表
fTable: 正态分布概率密度表
Length: 表的长度
*/

{
int i;
float h; /* 步长 */
float x,temp;
float C;

x=-3;
h= 6.0/Length/2;
FTable[0]=0;
C=1/sqrt(2*3.1415927);
/* 初始参数设置 */

fTable[…

[解决办法]
学习

热点排行