请教:如何用$RANDOM产生正态分布随机数(已解决)

sh/bash/dash/ksh/zsh等Shell脚本
回复
halfwolf
帖子: 40
注册时间: 2012-01-28 21:27

请教:如何用$RANDOM产生正态分布随机数(已解决)

#1

帖子 halfwolf » 2012-01-31 21:35

本人做了一定的测试,发现shell自带的$RANDOM为平均分布,而项目中需要的随机数为正态分布。请问有没有合适的办法对该变量进行处理,使其满足正态分布?或者有没有其替代方法?
:em01
上次由 halfwolf 在 2012-02-02 11:31,总共编辑 1 次。
头像
cuihao
帖子: 4793
注册时间: 2008-07-24 11:33
来自: 郑州
联系:

Re: 请教:如何用$RANDOM产生正态分布随机数

#2

帖子 cuihao » 2012-01-31 21:42

求人不如求它仨: 天蓝的Wiki 屎黄的Wiki 绿
Site: CUIHAO.TK    Twitter: @cuihaoleo
Machine: Athlon64 X2 5200+ / 2x2GB DDR2-800 / GeForce GTS 450
AD: ~まだ見ぬ誰かの笑顔のために~
halfwolf
帖子: 40
注册时间: 2012-01-28 21:27

Re: 请教:如何用$RANDOM产生正态分布随机数

#3

帖子 halfwolf » 2012-02-01 6:45

谢楼上!试过了完全可行!
U、V~U(0,1),则X=((-2*ln(U))^0.5)*cos(2*pi*V)~N(0,1)
:em04
halfwolf
帖子: 40
注册时间: 2012-01-28 21:27

Re: 请教:如何用$RANDOM产生正态分布随机数(已解决)

#4

帖子 halfwolf » 2012-02-03 20:41

还有一个办法就是调用高级工具来处理,譬如调用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;"
回复