根据均匀分布⽣成正态分布Box-Muller算法
先贴出来代码,后⾯给出详细证明过程
#include<stdafx.h>
#include<math.h>
#include<assert.h>
#include<stdlib.h>
#include<iostream>
#include<time.h>
using namespace std;
class ALL_DISTRIBUTE
{
truncated normal distributionpublic:
static double standartDis(int ave, double delta);
static double __rand(void);
};
//产⽣⼀个[0-1]的均匀随机数
double ALL_DISTRIBUTE::__rand(void)
{
int ret = rand() % 32767;
double res = (32767.0 - ret) / 32767;
return res;
}
double ALL_DISTRIBUTE::standartDis(int ave, double delta)
{
double random_1 = __rand();
double random_2 = __rand();
double res = 0;
if (delta <=0 )
{
assert(0);
}
res = sqrt(delta)*sqrt(-2 * log(random_1))*cos(2*3.14*random_2) + ave;
return res;
}
int main(int argc, char** argv)
{
srand(time(NULL) * 100);
for (int i = 0; i<100; i++)
{
cout << ALL_DISTRIBUTE::standartDis(1, 0.01) << endl;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论