用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 3000 /*这个值为N可以定义的最大长度*/
7 # define N 100 /*产生随机序列的点数,注意不要大于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
38 fshow("x",&x,N); /*显示该序列*/
39
40 getch(); return 0;
41
42 }
43 /***************函数定义************************/
44
45 /*产生服从均匀分布的随机变量*/
46 void randa(float *x,int num)
47 {
48 int i;
49 struct time stime;
50 unsigned seed;
51 gettime(&stime);
52 seed=stime.ti_hund*stime.ti_min*stime.ti_hour;
53 srand(seed);
54 for(i=0;i |