方法三:由正态分布曲线图形得到的直观结果

图1 正态分布曲线

从上图可以看出,在μ附近的概率密度大,远离μ的地方概率密度小,我们要产生的随

机数要服从这种分布,就是要使产生的随机数在μ附近的概率要大,远离μ处小。算法的主要思想是:在上图的大矩形中随机产生点,这些点是平均分布的,如果产生的点落在概率密度曲线的下方,则认为产生的点是符合要求的,将它们保留,如果在概率密度曲线的上方,

则认为这些点不合格,将它们去除。如果随机产生了一大批在整个矩形中均匀分布的点,那

么被保留下来的点的横坐标就服从了正态分布。可以设想,由于在μ处的

f(x)的值比较大,理所当然的在μ附近的点个数要多,远离μ处的少,这从面积上就可以看出来。我们要产生的随机数就是这里的横坐标。

根据以上所述三种方法,编写C++测试代码如下:

#include

#include

#include

#include

#include

using namespace

std;

#define pi 3.1415926

#define rd (rand()/(RAND_MAX+1.0))

//区间[min,max]上的均匀分布,min和max要求传入的参数类型一致

template

T>

T rand(T min, T max)

{

return

min+(max-min)*rand()/(RAND_MAX+1.0);

}

//求均值为miu,方差为sigma的正太分布函数在x处的函数值

double normal(double x,

double miu,double sigma)

{

return

1.0/sqrt(2*pi)/sigma*exp(-1*(x-miu)*(x-miu)/(2*sigma*sigma));

}

//按照矩形区域在函数值曲线上下位置分布情况得到正太函数x值

double randn(double

miu,double sigma, double min ,double max)

{

double x,y,dScope;

do{

x=rand(min,max);

y=normal(x,miu,sigma);

dScope=rand(0.0,normal(miu,miu,sigma));

}while(dScope>y);

return x;

}

double randn(int

type)

{

//按照12个均匀分布之和减去6得到正态分布函数的x值

if (type==1)

return

rd+rd+rd+rd+rd+rd+rd+rd+rd+rd+rd+rd-6.0;

//按照计算公式y=sqrt(-2*ln(U))*cos(2*PI*V)计算得到x

else if(type==2)

return

sqrt(-2*log(rand()/(RAND_MAX+1.0)))*cos(2*pi*rand()/(RAND_MAX+1.0));

else

return

randn(0.0,1.0,-10.0,10.0);

}

int main(int

argc,char* argv[])

{

srand((unsigned)time( NULL

));

ofstream outfile("321.txt");

for (int i=0;i<100;i++)

{

//randn(1)、randn(2)和randn(3)效果差不多

outfile << randn(3) << endl;

}

return 0;

}

参考:

[1] http://zh.wikipedia.org/wiki/正态分布

[2] http://en.wikipedia.org/wiki/Normal_distribution

[3]

http://wenku.baidu.com/view/e9de620d7cd184254b3535c9?pn=2&ssid=&from=&bd_page_type=1&uid=bd_1332071259_725&pu=sl@1,pw@1000,sz@224_220,pd@1,fz@2,lp@0,tpl@color,

正态分布随机数 C语言,C语言产生满足正态分布的随机数相关推荐

  1. R语言学习——一元与多元正态分布检验(也可以用于其他分布的检验)

    文章目录 1 一元正态的评估 1.1 图像法 1.1.1 直方图 1.1.2 Q-Q图 1.2 峰度和偏度 1.3 统计检验 1.3.1 Shapiro-Wilks检验 1.3.2 Kolmogoro ...

  2. c语言求阶乘和的流程图_C/C++编程笔记:C语言 rand() 随机函数,深入解析程序随机数!...

    各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值,当序列足够长,这组数值近似满足均匀分布. C的标准函数库提供一随机数生成器rand(定义在stdlib.h),能返回 ...

  3. c语言输出字母随机数,你好,怎样用c语言输出一个1到100的随机数

    你好,怎样用c语言输出一个1到100的随机数以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 你好,怎样用c语言输出一个1 ...

  4. R语言使用rcauchy函数生成符合柯西分布的随机数、使用plot函数可视化符合柯西分布的随机数(Cauchy distribution)

    R语言使用rcauchy函数生成符合柯西分布的随机数.使用plot函数可视化符合柯西分布的随机数(Cauchy distribution) 目录

  5. c语言中有关随机数的程序,C语言中随机数相关问题

    用C语言产生随机数重要用到rand函数.srand函数.及宏RAND_MAX(32767),它们均在stdlib.h中进行了声明. int rand(void);//生成一个随机数 voidsrand ...

  6. 指数分布c语言,C语言下泊松分布以及指数分布随机数生成器实现

    最近实验室的项目需要实现模拟文件访问序列,要求单位时间内的数据请求次数符合泊松分布,而两次请求见的时间间隔符合指数分布.没办法只好重新捡起已经丢掉多时的概率知识.于是也就有了这篇关于在C语言下符合泊松 ...

  7. R语言GARCH族模型:正态分布、t、GED分布EGARCH、TGARCH的VaR分析股票指数

    全文链接:http://tecdat.cn/?p=31023 如何构建合适的模型以恰当的方法对风险进行测量是当前金融研究领域的一个热门话题(点击文末"阅读原文"获取完整代码数据). ...

  8. R语言使用runif函数生成符合均匀分布的随机数、使用plot函数可视化符合均匀分布的随机数(Uniform Distribution)

    R语言使用runif函数生成符合均匀分布的随机数.使用plot函数可视化符合均匀分布的随机数(Uniform Distribution) 目录

  9. R语言使用rbern函数生成符合伯努利分布(0-1分布)的随机数、使用plot函数可视化符合伯努利分布的随机数( Bernoulli distribution)

    R语言使用rbern函数生成符合伯努利分布(0-1分布)的随机数.使用plot函数可视化符合伯努利分布的随机数( Bernoulli distribution) 目录

最新文章

  1. C语言求数字菱形,打印数字菱形,急啊,帮帮小女子啊。。。
  2. Android Staido 一直scanning file to index
  3. 元素,布局方式,BFC和清除浮动
  4. python add argument list_python模块介绍- argparse:命令行选项及参数解析
  5. C++运行库 Neptune C++ Runtime Library(xbmc)
  6. 红杉中国合伙人刘星:新零售新在哪里?
  7. rxjava 并行_使用RxJava和Completable并行执行阻塞任务
  8. hadoop-hdfs-存储模型-架构模型-角色介绍
  9. SQL工作笔记-达梦7存储过程中游标的使用(for循环 IF等)
  10. [设计模式] javascript 之 策略模式
  11. 可计算行与计算复杂性多带图灵机实例
  12. 视频教程-WebService实战讲解课程-Java
  13. Stata做KHB中介效应分析
  14. servlet制作过滤器
  15. 笔记本连接android手机屏幕,实现手机、电脑屏幕共享的7个步骤
  16. Java成员变量初始化顺序
  17. SQL Server 使用触发器(trigger)发送电子邮件步骤详解
  18. CCC与Android交互的注意点
  19. CAN总线通信学习笔记
  20. 线下门店如何自动统计每日业绩

热门文章

  1. RT-Thread逐飞-智能车培训之RT-Thread在全向行进组中的应用
  2. 条形压电陶瓷执行器件和高压驱动器
  3. 神经网络为何成为学习算法的通用结构?
  4. 2020年安徽赛区智能车竞赛有关事项通知(草案)
  5. STC自动高速下载线
  6. 项目管理六大制约因素_知道了这7点,软件项目管理会变得更简单!
  7. 将数据库服务器的文件D 改名为,MySQL如何更改数据库数据存储目录详解
  8. FPGA之道(30)编写自己的vhdl库文件
  9. 【 FPGA 】UltraFast设计方法学:时序约束
  10. jvm 内存结构默写