C语言与数字信号处理——均匀分布的随机数

来源:互联网 发布:双11淘宝活动方案 编辑:程序博客网 时间:2024/05/17 23:47

1. 公式

概率密度函数:

f(n)={1ba,0,axb

均值:

E[X]=a+b2

方差:

VAR[X]=(ba)212

2. C代码生成随机数

C代码:

double uniform(double a, double b, long int * seed){       double t;       *seed = 2045 * (*seed) + 1;       *seed = (*seed) % 1048576;       t = (*seed)/1048576.0;       t = a + (b - a) * t;       return (t);}

参数说明:

  • a:给定区间的下限
  • b:给定区间的上限
  • *seed:随机数的种子

生成1000个均匀分布于区间[0,1]的随机数:

void main(void){    long int seed = 13579;    int j, num;    double a, b, temp;    FILE * fp;    a = 0;    b = 1;    num = 1000;    fp = fopen("uniform.dat", "w");    for (j = 0; j < num; j++)    {        temp = Uniform(a, b, &seed);        fprintf(fp, "%10.7f\n", temp);    }    fclose(fp);}

3. 对比matlab生成结果

用matlab生成相同数量的随机数,对比概率密度估计:

num = 1000;a = 0;b = 1;% 绘制概率密度函数x = -(a+1):0.01:(b+1);y = unifpdf(x,a,b); figure(1); plot(x,y); % 绘制随机数对比图z1 = VarName1;z2 = unifrnd(a,b,1,num); x1 = 0:1:(num-1);figure(2); plot(x1, z1, 'r.', x1, z2, 'b.');% 绘制概率密度估计对比图y1 = ksdensity(z1);y2 = ksdensity(z2);figure(3);plot(y1,'DisplayName','y1');hold on;plot(y2,'DisplayName','y2');hold off;

概率密度函数图:
这里写图片描述

随机数对比图:
这里写图片描述

概率密度估计对比图:
这里写图片描述

0 0
原创粉丝点击