数字信号的产生(10)-爱尔朗分布随机数
admin 于 2017年08月27日 发表在 机器学习笔记
爱尔朗分布随机数的计算与《数字信号的产生(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,进行直方图统计,如下:
