用c语言 产生服从均匀分布, 瑞利分布,莱斯分布,高斯分布的随机数

 
一,各个分布对应的基本含义:
  • 1. 均匀分布或称规则分布,顾名思义,均匀的,不偏差的。植物种群的个体是等距分布,或个体之间保持一定的均匀的间距。
  • 2. 高斯分布,  即正态分布(Normal distribution),也称“常态分布”,又名高斯分布(Gaussian distribution),最早由A.棣莫弗在求二项分布的渐近公式中得到。C.F.高斯在研究测量误差时从另一个角度导出了它。P.S.拉普拉斯和高斯研究了它的性质。[1]  是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。正态曲线呈钟型,两头低,中间高,左右对称因其曲线呈钟形,因此人们又经常称之为钟形曲线。若随机变量X服从一个数学期望为μ、方差为σ^2的正态分布,记为N(μ,σ^2)。其概率密度函数为正态分布的期望值μ决定了其位置,其标准差σ决定了分布的幅度。当μ = 0,σ = 1时的正态分布是标准正态分布
  • 3. 瑞利分布(Rayleigh Distribution):当一个随机二维向量的两个分量呈独立的、有着相同的方差的正态分布时,这个向量的模呈瑞利分布.
  • 4. 莱斯分布(Rice distribution或Rician distribution)是一种连续概率分布,以美国科学家斯蒂芬·莱斯(en:Stephen O. Rice)的名字命名。 正弦波加窄带高斯过程的包络概率密度函数分布称为莱斯(Rice)密度函数,也称广义瑞利分布。
 
二, 各个分布对应的随机变量产生的算法,
     
 
  1. # include "stdio.h"
  2. # include "math.h"
  3. # include "stdlib.h"
  4. # include "math.h"
  5. # include "dos.h"
  6. # define MAX_N /*这个值为N可以定义的最大长度*/
  7. # define N /*产生随机序列的点数,注意不要大于MAX_N*/
  8.  
  9. /*1.产生均匀分布的随机变量*/
  10. void randa(float *x,int num);
  11.  
  12. /*2.产生瑞利分布的随机变量*/
  13. void randr(float *x,int num);
  14.  
  15. /*3.产生标准高斯分布的随机变量*/
  16. void randn(float *x,int num);
  17.  
  18. /*4.产生莱斯分布的随机变量*/
  19. void randl(float *x, float a, float b, int num);
  20.  
  21. void fshow(char *name,float *x,int num);
  22.  
  23. /***************************************/
  24. int main()
  25. {
  26.  
  27. float x[N];
  28. int i;
  29.  
  30. // randa(&x,N); //均匀分布
  31. // randr(&x,N); //瑞利分布
  32. // randl(&x,10,10,N); //莱斯分布
  33. randn(&x,N); //高斯分布
  34.  
  35. /*此时x[N]表示要生成N个服从xx分布的的数组*/
  36.  
  37. fshow("x",&x,N); /*显示该序列*/
  38.  
  39. getch();
    return 0;
  40.  
  41. }
  42. /***************函数定义************************/
  43.  
  44. /*产生服从均匀分布的随机变量*/
  45. void randa(float *x,int num)
  46. {
  47. int i;
  48. struct time stime;
  49. unsigned seed;
  50. gettime(&stime);
  51. seed=stime.ti_hund*stime.ti_min*stime.ti_hour;
  52. srand(seed);
  53. for(i=;i<num;i++)
  54. {
  55. x[i]=rand();
  56. x[i]=x[i]/;
  57. }
  58. }
  59. /*产生服从瑞利分布的随机变量*/
  60. void randr(float *x,int num)
  61. {
  62. float x1[MAX_N];
  63. int i;
  64. struct time stime;
  65. unsigned seed;
  66. gettime(&stime);
  67. seed=stime.ti_hund*stime.ti_min*stime.ti_hour;
  68. srand(seed);
  69. for(i=;i<num;i++)
  70. {
  71. x1[i]=rand();
  72. x[i]=x1[i]/;
  73. x[i]=sqrt(-*log(x[i]));
  74. }
  75.  
  76. }
  77. /*产生服从标准高斯分布的随机变量*/
  78. void randn(float *x,int num)
  79. {
  80. float x1[MAX_N],x2[MAX_N];
  81. int i;
  82. struct time stime;
  83. unsigned seed;
  84. gettime(&stime);
  85. seed=stime.ti_hund*stime.ti_min*stime.ti_hour;
  86. srand(seed);
  87. for(i=;i<num;i++)
  88. {
  89. x1[i]=rand();
  90. x2[i]=rand();
  91. x1[i]=x1[i]/;
  92. x2[i]=x2[i]/;
  93. x[i]=sqrt(-*log(x1[i]))*cos(x2[i]*M_PI);
  94. }
  95.  
  96. }
  97. /*产生服从莱斯分布的随机变量*/
  98. void randl(float *x, float a, float b, int num)
  99. {
  100. float x1[MAX_N],x2[MAX_N];
  101. float temp[MAX_N];
  102. int i;
  103. struct time stime;
  104. unsigned seed;
  105. gettime(&stime);
  106. seed=stime.ti_hund*stime.ti_min*stime.ti_hour;
  107. srand(seed);
  108. for(i=;i<num;i++)
  109. {
  110. x1[i]=rand();
  111. x2[i]=rand();
  112. x1[i]=x1[i]/;
  113. x2[i]=x2[i]/;
  114. temp[i]=sqrt(-*log(x1[i]))*cos(x2[i]*M_PI);
  115. x2[i]=sqrt(-*log(x1[i]))*sin(x2[i]*M_PI);
  116. x1[i]=temp[i];
  117. x[i]=sqrt((a+x1[i])*(a+x1[i])+(b+x2[i])*(b+x2[i]));
  118. }
  119.  
  120. }
  121.  
  122. void fshow(char *name,float *x,int num)
  123. {
  124. int i,sign,L;
  125. float temp;
  126. printf("\n");
  127. printf(name);
  128. printf(" = ");
  129. L=;
  130. /*按照每行6个数据的格式显示*/
  131. for(i=;i<num;i++)
  132. {
  133. temp=i/L;
  134. sign=temp;
  135. if((i-sign*L)==) printf("\n");
  136. if(x[i]>) printf(" %f ",x[i]);
  137. else printf("%f ",x[i]);
  138. }
  139. }

其他分布的详细介绍, 请戳这里:http://www.math.uah.edu/stat/special/index.html

国外知名网站给出的各种分布的曲线图(后台程序驱动):

---OVER---

附录:   Cauchy 分布 随机数生成代码:

  1. import math
  2. import random
  3.  
  4. def cauchy(location, scale):
  5.  
  6. # Start with a uniform random sample from the open interval (0, 1).
  7. # But random() returns a sample from the half-open interval [0, 1).
  8. # In the unlikely event that random() returns 0, try again.
  9.  
  10. p = 0.0
  11. while p == 0.0:
  12. p = random.random()
  13.  
  14. return location + scale*math.tan(math.pi*(p - 0.5))

C语言生成服从均匀分布, 瑞利分布, 莱斯分布, 高斯分布的随机数的更多相关文章

  1. Matlab 高斯分布 均匀分布 以及其他分布 的随机数

    Matlab 高斯分布 均匀分布 以及其他分布 的随机数 betarnd 贝塔分布的随机数生成器 binornd 二项分布的随机数生成器 chi2rnd 卡方分布的随机数生成器 exprnd 指数分布 ...

  2. Javascript 随机数函数 学习之一:产生服从均匀分布随机数

    大家都知道Math.random是 javascript 中返回伪随机数的函数,但查看 MDN, The Math.random() function returns a floating-point ...

  3. HIVE- 数据倾斜

    数据倾斜就是由于数据分布不均匀,数据大量集中到一点上,造成数据热点.大多数情况下,分为一下三种情况: 1.map端执行比较快,reduce执行很慢,因为partition造成的数据倾斜. 2.某些re ...

  4. AWGN

    高斯白噪声的功率谱密度服从均匀分布,幅度分布服从高斯分布: 白噪声是指它的二阶矩不相关,一阶矩为常数,是指先后信号在时间上的相关性: 高斯白噪声在任意两个不同时刻上的随机变量之间,不仅是互不相关的,而 ...

  5. 使用K-S检验一个数列是否服从正态分布、两个数列是否服从相同的分布

    假设检验的基本思想: 若对总体的某个假设是真实的,那么不利于或者不能支持这一假设的事件A在一次试验中是几乎不可能发生的.如果事件A真的发生了,则有理由怀疑这一假设的真实性,从而拒绝该假设. 实质分析: ...

  6. 各类分布----二项分布,泊松分布,负二项分布,gamma 分布,高斯分布,学生分布,Z分布

    伯努利实验: 如果无穷随机变量序列  是独立同分布(i.i.d.)的,而且每个随机变量  都服从参数为p的伯努利分布,那么随机变量  就形成参数为p的一系列伯努利试验.同样,如果n个随机变量  独立同 ...

  7. Java中利用Math.random()产生服从泊松分布的随机数

    众所周知.Java的Math.random()产生的是服从均匀分布的随机数,可是其它分布的应用也相当广泛,比如泊松分布和高斯分布(正态分布).而这些分布Java没有非常好的提供(高斯分布能够利用Ran ...

  8. C语言产生标准正态分布或高斯分布随机数

    C语言 产生标准正态分布或高斯分布 随机数 产生正态分布或高斯分布的三种方法: 1. 运用中心极限定理(大数定理) #include #include #define NSUM 25 double g ...

  9. R语言生成随机数

    1.概述 作为一种语言进行统计分析,R有一个随机数生成各种统计分布功能的综合性图书馆.R语言可以针对不同的分布,生成该分布下的随机数.其中,有许多常用的个分布可以直接调用.本文简单介绍生成常用分布随机 ...

随机推荐

  1. Mysql Optimization Overview

    The information below i get from http://dev.mysql.com/doc/refman/8.0/en/optimize-overview.html Optim ...

  2. 6 this的使用方法

    class Person { String name; void talk() { System.out.println("my name is "+this.name); } } ...

  3. 【BZOJ-2725】故乡的梦 Dijsktra + Tarjan + Dinic + BFS + 堆

    2725: [Violet 6]故乡的梦 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 502  Solved: 173[Submit][Status ...

  4. Ubuntu下root密码认证错误

    1.默认root密码是随机的,即每次开机都有一个新的root密码.我们可以在终端输入命令 sudo passwd root,然后输入当前用户的密码,再输入要设置root的密码,我们一般设置成两个都一样 ...

  5. VS提示“项目文件" "已被重命名或已不在解决方案中”的解决办法 .

    多个项目的源码在一个源代码中,其中,有一个源代码废弃不可用了.删除后,再次生成解决方案时出现了问题“项目文件" "已被重命名或已不在解决方案中”. 解决方法是: 1.找到主项目,右 ...

  6. oracle 锁的介绍 (转)

    本文转自:http://blog.csdn.net/gyb2013/article/details/6929697 一.什么是锁: Oracle的锁机制是一种轻量级的锁定机制,不是通过构建锁列表来进行 ...

  7. 百度地图学习(Ⅰ)-Android端地图的显示及简单应用

    ps:(1.地图应用一定要在真机测试: 2.Design By:Android Stdio: 3.百度地图官方参考链接(http://developer.baidu.com/map/index.php ...

  8. POJ3764 The xor-longest Path

      Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6361   Accepted: 1378 Description In ...

  9. Unity 依赖注入知识点

    三种依赖注入方法,构造器注入.属性注入.方法注入 可以配置Config文件,来实现不用修改代码.需要先将接口与实体关联,然后使用时会自动加载对应实体. namespace WeChatConsole ...

  10. Ubuntu 使用笔记

    持续更新 从前使用sudo apt update更新时, 发现软件源是cn.archive.ubuntu.com. 最近在system setting 中将软件源改成了archive.ubuntu.c ...