
请教:如何用$RANDOM产生正态分布随机数(已解决)
-
- 帖子: 40
- 注册时间: 2012-01-28 21:27
请教:如何用$RANDOM产生正态分布随机数(已解决)
本人做了一定的测试,发现shell自带的$RANDOM为平均分布,而项目中需要的随机数为正态分布。请问有没有合适的办法对该变量进行处理,使其满足正态分布?或者有没有其替代方法?


上次由 halfwolf 在 2012-02-02 11:31,总共编辑 1 次。
- cuihao
- 帖子: 4793
- 注册时间: 2008-07-24 11:33
- 来自: 郑州
- 联系:
Re: 请教:如何用$RANDOM产生正态分布随机数
求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 蓝红黄蓝绿红
Site: CUIHAO.TK Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
Site: CUIHAO.TK Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
-
- 帖子: 40
- 注册时间: 2012-01-28 21:27
Re: 请教:如何用$RANDOM产生正态分布随机数
谢楼上!试过了完全可行!
U、V~U(0,1),则X=((-2*ln(U))^0.5)*cos(2*pi*V)~N(0,1)

U、V~U(0,1),则X=((-2*ln(U))^0.5)*cos(2*pi*V)~N(0,1)

-
- 帖子: 40
- 注册时间: 2012-01-28 21:27
Re: 请教:如何用$RANDOM产生正态分布随机数(已解决)
还有一个办法就是调用高级工具来处理,譬如调用matlab
cat test.sh
--------------------------------------------------------
#!bin/bash
FileName=mat_prog.m
cat > $FileName <<EOF
%This is a matlab script
rn=round(random('normal',256,512,1000000,1));
rn(find(rn<64))=[];
rn(find(rn>1024))=[];
x=unique(rn);
hist(rn,x);
fid=fopen(`myfile.txt`,'w');
fprintf(fid,'%d\n',rn);
fclose(fid);
EOF
chmod +x $FileName
matlab -nodesktop -nosplash -nojvm -r "run ./$FileName;quit;"
cat test.sh
--------------------------------------------------------
#!bin/bash
FileName=mat_prog.m
cat > $FileName <<EOF
%This is a matlab script
rn=round(random('normal',256,512,1000000,1));
rn(find(rn<64))=[];
rn(find(rn>1024))=[];
x=unique(rn);
hist(rn,x);
fid=fopen(`myfile.txt`,'w');
fprintf(fid,'%d\n',rn);
fclose(fid);
EOF
chmod +x $FileName
matlab -nodesktop -nosplash -nojvm -r "run ./$FileName;quit;"