# Japanese is written in UTF-8.
# シャープはコメントです。
##勉強用制御
No1=0
No2=0
No3=0
##色々設定
bin=50 # bin面体サイコロ
dice_test=10000 # サイコロのチェックのために振る回数
one_test=10 # one_test回振って平均を求める
test=1000 # 平均を求める試行回数
##出力ファイル
dice_check="dice_check_bin${bin}_test${diec_test}"
dice_check_txt="${dice_check}.txt"
dice_check_ps="${dice_check}.ps"
CLT_check="CLT_check_bin${bin}_test${test}"
CLT_check_txt="${CLT_check}.txt"
CLT_check_ps="${CLT_check}.ps"
rm -f $dice_check_txt
rm -f $dice_check_ps
rm -f $CLT_check_txt
rm -f $CLT_check_ps
#さいころ関数
dice_func(){
echo "$RANDOM" $bin | awk '{print int($1/32767*$2)}'
}
#サイコロ関数のテスト
echo "Dice is" `dice_func 0`"."
####
if (($No1)) ;
then
####
#配列の初期化1
array=()
for((i=0;i do
array[${i}]=0
done
#サイコロ関数の正しさをtest回ふって確認。
for((i=0;i do
rand=`dice_func 0`
array[${rand}]=$((${array[${rand}]}+1))
done
#結果をファイルに書き込み
for((i=0;i do
echo "$i ${array[${i}]}" >> ${dice_check_txt}
done
echo ${dice_check_txt} "is made."
###
fi #No1
###
####
if (($No2)) ;
then
####
#配列の初期化2
for((i=0;i do
array[${i}]=0
done
#「サイコロ関数をone_test回ふってその平均を調べる。」試行をtest回実施。
for((i=0;i do
s=0
for((j=0;j do
rand=`dice_func 0`
s=$((${s}+${rand}))
done
ave=`echo $s $one_test | awk '{print int($1/$2)}'`
array[${ave}]=$((${array[${ave}]}+1))
echo $i "kai end."
done
#結果をファイルに書き込み
for((i=0;i do
echo "$i ${array[${i}]}" >> ${CLT_check_txt}
done
echo ${CLT_check_txt} "is made."
###
fi #No2
###
####
if (($No3)) ;
then
####
#初期値を探す
n0=`awk 'BEGIN{max_n=0}{if($2>max_n) max_n=$2}END{print max_n}' ${CLT_check_txt}`
m0=`awk 'BEGIN{max_m=0;max_n=0}{if($2>max_n){max_n=$2;max_m=$1}}END{print max_m}' ${CLT_check_txt}`
#Gnuplotで作図
gnuplot<
set ylabel "Number"
set xlabel "Value"
set te po co solid
set title "Dice Check : Bin ${bin} Test ${dice_test}"
set ou "${dice_check_ps}"
pl [][0:] "${dice_check_txt}" w histeps lw 2
set ou
Gauss(x)=n*exp(-0.5*((x-m)/s)**2)
n=${n0}
m=${m0}
s=m*0.1
fit Gauss(x) "${CLT_check_txt}" via n,m,s
set title "CLT Check : Ave. of ${one_test} Bin ${bin} (Test ${dice_test})"
set ou "${CLT_check_ps}"
pl "${CLT_check_txt}" w histeps lw 2, Gauss(x)
set ou
exit
EOF
###
fi #No3
###
2016年5月23日月曜日
Bashスクリプトで中心極限定理
中心極限定理実験 Bashスクリプト。学生さんの(スクリプトの書き方も含めた) 勉強用。