爱尔朗分布随机数的计算与《数字信号的产生(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,进行直方图统计,如下:

下一篇:《数字信号的产生(11)-贝努里分布随机数》

注意:本站所有文章除特别说明外,均为原创,转载请务必以超链接方式并注明作者出处。 标签:处理算法,信号处理