忍者ブログ
日々の研究生活のメモ書きなど

例えばこんな感じで
gsl-randist 0 1000 rayleigh 1 > hoge.txt
ただしGSLをインストールして、PATHを通していないと使えない
デフォルトのPATHにインストールしたなら
$ which gsl-randist
/usr/local/bin/gsl-randist






gsl-randistの使い方を軽く説明・・・
[coffee@somewhere:~]gsl-randist
Usage: gsl-randist seed n DIST param1 param2 ...
Generates n samples from the distribution DIST with parameters param1,
param2, etc. Valid distributions are,

beta
binomial
bivariate-gaussian
cauchy
chisq
dir-2d
dir-3d
dir-nd
erlang
exponential
exppow
fdist
flat
gamma
gaussian-tail
gaussian
geometric
gumbel1
gumbel2
hypergeometric
laplace
landau
levy
levy-skew
logarithmic
logistic
lognormal
negative-binomial
pareto
pascal
poisson
rayleigh-tail
rayleigh
tdist
ugaussian-tail
ugaussian
weibull
要するに、gsl-randist には次の引数が必要
初期シード, 出力したいデータ点数, その乱数が沿った分布関数, パラメーター(必要な個数は分布によって異なる)

例えば今、Rayleigh分布についての乱数データを100個欲しいとする
gsl-randist 0 1000 rayleigh 1 > hoge.txt
0が初期シード
1000は1000点乱数生成する
rayleighは分布関数
1はパラメーター, ここでは分散に相当


???「ね、簡単でしょ?」


え、ほんとに分布関数に沿っているか確認したい?
GSL「任せてください」
cat hoge.txt | gsl-histogram 0 5 100 > foo.txt
これでヒストグラムが取れる
gst-randistが使えるなら、gst-histogramというヒストグラムを取ってくれるコマンドも使えるはず〜


あとはgnuplotでグラフを書くだけ
plot [0:5]"foo.txt" u 1:3 w boxes
参考 :
result




賢明な読者の方はRayleigh分布は1つのパラメーターで表せることはすでにご存知だと思うが、
もしど忘れしてしまったときは
$ gsl-randist 0 1000 rayleigh
Error: arguments should be sigma = scale parameter
と打つと、必要なパラメーターは1つだと教えてくれる
なので、「とりあえず gsl-randist と打つ」とだけ覚えておけば他は覚えなくてよいだろう






ちなみに beta分布〜weibull分布 までいくつかの分布を選べたがこれらはすべてGSLに実装されている
つまり自分でソースを書いて、GSLの必要なヘッダーをincludeして・・・という作業をしなくてよいのでかなり楽

一方であくまでデモンストレーションなので、ガチのシミュレーションには使えない
シェルで全部やるのは時間がかかりすぎるので・・・・











PR
プロフィール
HN:coffee
職業:物理屋(自称)
趣味:映画鑑賞
自己紹介:
#include <stdio.h>
#include "MyProfile.h"

#define TWITTER coffee_pote

#define WISH_LIST
amazonのほしい物リスト
#ifdef RICH_FLAG
// ↑いつも支援いただきありがとうございます m(_ _)m
#endif


int main(void){

printf("\n");
printf("D論・・・? あぁそんな子もいましたね(執筆中)\n");
printf("\n");
printf("猿でもわかるgnuplot を執筆中(こっちの執筆は半年以上何も進んでいない・・・・)\n");
/* 最終更新 2017/07/19 */
return 0;

}
カウンター
ブログ内検索
ツイートするボタン
Flickr

Template "simple02" by Emile*Emilie
忍者ブログ [PR]