当前位置:   article > 正文

产生瑞利分布的随机数 C语言实现_瑞利分布随机数

瑞利分布随机数

瑞利分布的概率密度函数为

f(x)=\frac{x}{\sigma ^2}e^{-x^2/2\sigma ^2}x>0

瑞丽分布的均值为\sigma \sqrt{\frac{\pi}{2}},方差为(2-\frac{\pi}{2})\sigma^2

首先使用逆变换法产生参数\beta=2指数分布的随机变量y,其概率密度函数f(y)=\frac{1}{2}e^{-\frac{y}{2}}

然后通过变换x=\sigma\sqrt{y},产生瑞丽分布的随机变量x,具体的方法如下:

(1)产生均匀分布的随机数u

(2)计算y=-2ln(u)

(3)计算x=\sigma \sqrt{y}

1、头文件 rayleigh.h

  1. #pragma once
  2. #ifndef RAYLEIGH_H_
  3. #define RAYLEIGH_H_
  4. /*
  5. 函数功能: 瑞利分布的随机数
  6. 输入参数说明:
  7. sigma 瑞利分布的均值
  8. seed 长整型指针变量, *seed 为伪随机数的种子
  9. */
  10. double rayleigh_data(double sigma, long int * seed);
  11. #endif // !RAYLEIGH_H

2、rayleigh.c

  1. #include "rayleigh.h"
  2. #include <stdint.h>
  3. #include "string.h"
  4. #include "stdio.h"
  5. #include "uniform.h"
  6. #include <math.h>
  7. double rayleigh_data(double sigma, long int * seed)
  8. {
  9. double u, x;
  10. u = uniform_data(0.0, 1.0, seed);
  11. x = -2.0 * log(u);
  12. x = sigma + sqrt(x);
  13. return x;
  14. }

3、主函数 main.c

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include "uniform.h"
  4. #include "rayleigh.h"
  5. int main()
  6. {
  7. // 产生50个瑞利分布的随机数
  8. int i, j;
  9. long int s;
  10. double x, sigma;
  11. sigma = 1.0; s = 13579;
  12. for (i = 0; i < 10; i++)
  13. {
  14. for (j = 0; j < 5; j++)
  15. {
  16. x = rayleigh_data(sigma, &s);
  17. printf("%13.7f",x);
  18. }
  19. printf("\n");
  20. }
  21. getchar(); // 此行代码是为了保持输出窗口,按任意按键关闭弹窗
  22. return 0;
  23. }

4、调试输出结果

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/83847
推荐阅读
相关标签
  

闽ICP备14008679号