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

泊松分布

在实际的事例中,当某一事件,比如进站乘客数量,电话交换机接收到的通话请求以固定的瞬时速率λ独立且随机地出现时,就可以认为该事件在单位时间内发生的次数符合泊松分布。

首先必须由二项分布引出:

如果做一件事情成功的概率是 p 的话,那么独立尝试做这件事情 n 次,成功次数的分布就符合二项分布。展开来说,在做的 n 次中,成功次数有可能是 0 次、1 次 …… n次。成功 i 次的概率是:

( n 中选出 i 项的组合数) * p ^ i * (1-p)^ (n-i)

以上公式很容易推导,用一点概率学最基本的知识就够了。因为每一特定事件成功的概率是 p ,不成功的概率是 1-p 。i 次成功的事件可以任意分布在总共的 n 次尝试中。把它们乘起来就是恰好成功 i 次的概率。

当我们把二项分布推而广之后,就可以得到波松分布。

可以这样考虑,在一个特定时间内,某件事情会在任意时刻随机发生(前提是,每次发生都是独立的,且跟时间无关)。当我们把这个时间段分成非常小的时间片构成时,可以认为,每个时间片内,该事件可能发生,也可能不发生。几乎可以不考虑发生多于一次的情况(因为时间片可被分的足够小)。

当时间片分的越小,该时间片内发生这个事件的概率 p 就会成正比的减少。即:特定时间段被分成的时间片数量 n 与每个时间片内事件发生的概率 p 的乘积 n*p 为一个常数。这个常数表示了该事件在指定时间段发生的频度。

回过头来再来看这段时间内,指定事件恰好发生 i 次的概率是多少?代入上面推导出来的公式得到:

n * (n-1)... (n-i+1) / i! * p^i * (1-p) ^ (n-i) => np(np-p)...(np-ip+p) / i! * ((1-p) ^ (-1/p))^(-np) / (1-p) ^i

当 n 趋向无穷大时,p 趋向 0 。而此时 (1-p)^(-1/p) 趋向 e 。

上面这个公式可以划简为

其中λ事件发生的平均速率。

有了这些知识,那么写出符合泊松分布的随机数生成器程序也就不难了:

int possion(int Lambda)

{

int k = 0;

long double p = 1.0;

long double l = exp(-Lambda);

srand((unsigned)time(NULL));

//printf("%1.5Lf\n", l);

while(p>=l)

{

double u = U_Random();

p *= u;

k++;

}

return k-1;

}

double U_Random()

{

double f;

f = (float)(rand() %100);

return f/100;

}

指数分布

指数分布是一种连续的概率分布,通常可以用来描述连续的独立随机事件发生的时间间隔。其概率密度函数为:

其中λ是事件发生的平均速率。

对于较为简单的概率分布,其随机数生成器可以通过其对应的累积分布函数的逆函数构造。具体的证明可以参考这篇文章:点击打开链接。对于指数分布来说,其累积分布函数为:

那么其逆函数则为:

所以其随机数生成器程序为:

double randomExponential(double lambda)

{

double pv = 0.0;

pv = (double)(rand()%100)/100;

while(pv == 0)

{

pv = (double)(rand() % 100)/100;

}

pv = (-1 / lambda)*log(1-pv);

return pv;

}

原文:http://blog.csdn.net/asialiyazhou/article/details/45509047

指数分布c语言,C语言下泊松分布以及指数分布随机数生成器实现相关推荐

  1. c语言大作业 模拟泊松分布,C语言下泊松分布以及指数分布随机数生成器实现

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

  2. c语言图形方式初始化,c语言图形方式下的编程.doc

    c语言图形方式下的编程.doc C语言图形方式下的编程 学习目标 ·了解PC显示系统的结构 ·C语言图形初始化的一般方法 ·C语言常用的图形处理函数 显示系统简介 PC机显示系统一般是由显示器和显示卡 ...

  3. 大学c语言下上机考试题,计算机考试二级C语言上机试题下[5]

    第 35套 试题说明 *********************************** 第一题(30分) 函数fun的功能是:统计长整数n的各个位上出现数字1.2.3的次数,并通过 外部(全局) ...

  4. 回旋矩形C语言,C语言回旋函数解释下,该如何处理

    当前位置:我的异常网» C语言 » C语言回旋函数解释下,该如何处理 C语言回旋函数解释下,该如何处理 www.myexceptions.net  网友分享于:2013-06-08  浏览:30次 C ...

  5. python代码命令行tab补齐_Python语言交互模式下命令tab补全

    本文主要向大家介绍了Python语言交互模式下命令tab补全,通过具体的内容向大家展示,希望对大家学习Python语言有所帮助. python默认就可以进行tab补全命令行,在交互模式下,只要自己写个 ...

  6. Go语言基本语法 (下)

    原作者博客链接:[https://www.liwenzhou.com/][https://www.liwenzhou.com/] Golang 中文文档地址:https://studygolang.c ...

  7. C语言中双下划线__的作用

    C语言中双下划线__的作用 以单下划线(_)表明是标准库的变量 双下划线(__) 开头表明是编译器的变量 所以 双下划线__只是C语言的一个合法标识符 不一定是变量, 也可以是函数,宏等. 同时双下划 ...

  8. c语言添加输入函数吗,C语言scanf()函数下支持中文输入吗?

    C语言scanf()函数下支持中文输入吗? C语言scanf()函数下支持中文输入吗? 如果我编写一个程序,要求是先输入姓,再输入名,然后按照常姓名的方式排列出来,如果我需要输入中文该怎么办? 搜索更 ...

  9. linux c语言 ppt,Linux下C语言编程.ppt

    Linux下C语言编程 Linux中C语言的重要性 Linux和C天生有不解之缘. Linux操作系统的内核主要是用C写的,另外Linux下的很多软件也是用C写的,特别是一些著名的服务软件,比如MyS ...

最新文章

  1. 树形DP——Codeforces Choosing Capital for Treeland
  2. Struts 源码分析笔记1(尚无内容-请跳过,省得浪费时间)
  3. SQL Server数据库重命名、数据导出等若干问题
  4. nginx 子请求接收响应_Nginx详解其原理
  5. python基本语法:元组
  6. Android-即时通训
  7. 4j设置文件保存天数_文件备份很麻烦,各种工作不知道怎么选择,容器时代的备份方案!...
  8. 2.图像作为函数 | 如何把图像看作函数_2
  9. BitMEX将于3月份分批推出DOT、YFI、UNI等六个币种的双币种永续合约
  10. hashmap hashtable concurrenthashmap区别
  11. cisco3745做Easy ×××
  12. 中国高校那些不为人知的秘密,你听说过吗?
  13. 【截屏、录屏】工具分享-最简单的工具-QQ
  14. 模电笔记之共射放大电路
  15. OpenStack in containers
  16. linux:挂载、rpm、yum、scp、ssh、crontab、时钟同步
  17. python 强大的错误重试库 tenacity retry
  18. 多线程就一定快吗?天真!
  19. Linux上传输大于4G的文件,sz命令用不了
  20. 一本正经的聊聊手机主题颜色随手机壳颜色变化的几种方案

热门文章

  1. C语言中 .c 和 .h 文件有什么关系?
  2. js中 ‘ ‘==0 为什么等于true?
  3. react修改webpack配置,添加别名
  4. oracle获取某年第一天和最后一天,Oracle取得本月、本年第一天和最后一天
  5. i春秋CTF训练 Web 破译
  6. 每日10行代码57: appium测试坚果手机出现socket hang up报错的解决
  7. 2019计算机电源海关征税,回国华人注意!2019中国海关严打:这些东西千万别带了!...
  8. 神州租车——为用户提供精细化租车服务
  9. Git --- Git Gui
  10. word中插入页码方法