数字信号的产生(10)-爱尔朗分布随机数
admin 于 2017年09月03日 发表在 机器学习笔记
爱尔朗分布随机数的计算与《数字信号的产生(4)-指数分布随机数》中使用的方法一致,即:逆变换法。
1. 爱尔朗分布
2. m=3, β=1.0 利用函数生成曲线图,如下:
3. 生成方法
逆变换法产生爱尔朗分布随机变量x,具体方法如下:
4. 函数说明(erlang.h)(关于uinform函数,请查看这里)
#include <math.h> #include "uniform.h" double erlang(int m,double beta,long int *s); /* m —— 爱尔朗分布中的参数m beta —— 爱尔朗分布参数β *s —— 随机数种子 */ double erlang(int m,double beta,long int *s ) { int i; double u,x; for(u=1.0,i=0;i<m;i++) { u*=uniform(0.0,1.0,s); } x=-beta*log(u); return(x); }
5. 主函数实现(main.c)
#include <stdio.h> #include "erlang.h" int main() { int i,j,m; long int s; double x,beta; m=3; beta=1.0; s=13579; FILE *fp; //存储最终计算值 fp=fopen("data.dat","w"); //打开文本 for(i=0;i<10;i++) { for(j=0;j<5;j++) { x=erlang(m,beta,&s); printf("%13.7f",x); fprintf(fp,"%.7lf\n",x); //存储数值 } printf("\n"); } fclose(fp); //关闭文本 return 0; }
6. 执行结果
7. 使用软件QtiPlot,进行直方图统计,如下: