shell中产生随机数的方式有很多,常用a=$RANDOM或者awk内置的随机数rand()生成,但他们都是均匀分布随机数。
下面展示由均匀分布的随机数产生正态分布随机数的awk程序
1 #!/bin/bash 2 miu=0.0 3 sigma=0.71 4 num=2000 5 awk 'BEGIN{ 6 srand(); 7 rms='"$sigma"'/2.24 8 ssr=0; 9 for (i=0; i<('"$num"'/2); i++) { 10 x1=rand(); 11 x2=rand(); 12 y1=rms*sqrt(-10*log(x1))*sin(2*3.1416*x2); 13 y2=rms*sqrt(-10*log(x2))*cos(2*3.1416*x1); 14 ssr=ssr+y1*y1+y2*y2; 15 printf("%f10.6\n%f10.6\n",y1+'"$miu"',y2+'"$miu"') 16 }; 17 print "RMS of this data set is",sqrt(ssr/'"$num"') 18 }' > normal_random.txt
其中miu和sigma分别代表正态分布的数学期望和标准差,sum代表生成随机数的个数(偶数个)