1. 伯努利-高斯分布

伯努利-高斯分布的随机变量x是伯努利分布的随机变量y与高斯分布随机变量z的乘积,即 x = y * z 。因此,伯努利-高斯分布的随机数可认为是:当伯努利序列中有1时,打开高斯随机函数发生器,并输出其对应的值。伯努利-高斯分布的均值为pu,方差为p,其中p是伯努利分布的参数,μ是高斯分布的均值。

2. 产生伯努利-高斯分布随机变量x的算法如下:

(1)产生伯努利分布的随机数y,即:y~BN(p)

(2)产生高斯分布的随机数z,即:z~N(μ,σ)

(3)计算 x = y * z

3. 函数说明(bg.h)(关于gauss函数,请查看这里

#include "gauss.h"
#include "uniform.h"
 
double bg( double p, double mean, double sigma, long int *s);
double bg( double p, double mean, double sigma, long int *s)
{
    double u,x;
    u=uniform(0.0,1.0,s);
    if(u<=p)
    {
        x=gauss(mean,sigma,s);
    }
    else
    {
        x=0.0;
    }
    return(x);
}

4. 主函数实现(main.c)

#include <stdio.h>
#include "bg.h"
 
int main(void)
{
    int i,j;
    long int s;
    double p,x,mean,sigma;
    p=0.4;
    mean=0.0;
    sigma=1.0;
    s=12357;
    FILE *fp;   //存储最终计算值
    fp=fopen("data.dat","w");   //打开文本
    for(i=0; i<10; i++)
    {
        for(j=0; j<5; j++)
        {
            x=bg(p,mean,sigma,&s);
            printf("%13.7f",x);
            fprintf(fp,"%.7f\n",x);    //存储数值
        }
        printf("\n");
    }
    return 0;
}

5. 执行结果

6. 使用软件QtiPlot,绘制输出波形

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