数字信号的产生(4)-指数分布随机数

1. 变换法概念

求逆法是基于概率积分反变换原则,是许多种离散分布中获取采样值的基本方法。

求逆法基本步骤如下:

  1. 计算需要的随机变量X的概率分布函数F(X);

  2. 在X的取值范围内,置F(X) = R。由于X是一个随机变量,因此R也是一个随机变量,可以证明,R是区间(0,1)上的均匀分布。

  3. 解方程F(X)=R ,用R来表示X,即求F(X)的逆。

  4. 已知(0,1)上均匀分布的随机数R1, R2, R3, R4, Ri … 根据Xi=FX-1(Ri)计算所要的随机变量。

2. 逆变换法证明

图片

3. 指数分布随机数的生成方法

图片

4. 指数分布示意图

当 λ=1/β,示意图如下:

图片

5. 函数程序(exponent.c)

关于uinform函数,请查看这里。

代码
/*
*   beta — 双精度实型变量,指数分布的均值 
*   s    —长整型指针变量, *s随机数的种子
*/
#include <math.h>
#include "uniform.h"

double exponent( double beta, long int *s);

double exponent( double beta, long int *s)
{
    double u,x;
    u=uniform(0.0,1.0,s);
    x=-beta * log(u);
    return(x);
}

6. 示例函数

产生50个均值为2、方差为4的指数分布随机数。

代码
#include <stdio.h>
#include "exponent.h"

int main(void)
{
    int i,j;
    long int s;
    double x,beta;
    beta=2.0;
    s=13579;
    FILE *fp;   //存储最终计算值
    fp=fopen("data.dat","w");   //打开文本
    //计算数值
    for(i=0;i<10;i++)
    {
        for(j=0;j<5;j++)
        {
            x=exponent(beta,&s);    //调用逆分布函数
            printf("%13.7f",x);
            fprintf(fp,"%.7lf\n",x);    //存储数值
        }
        printf("\n");
    }
       fclose(fp);    //关闭文本

    return 0;
}

7. 生成数值

图片

8. 直方图分析

使用软件QtiPlot,进行直方图分析,如下:

图片

下一篇:《数字信号的产生(5)-拉普拉斯分布随机》