[ in English ]
n 次元 Fisher-Bingham 分布に対する最尤推定
C のプログラムと計算結果
n 次元 Fisher-Bingham 分布に対する最尤推定についてのプログラムパッケージ fb2_package.tar .
このパッケージの中身は次のようなプログラム(計算結果のファイル (*.log) は含まない)からなる.
- MLE for 1 次元 FB 分布
- MLE for 2 次元 FB 分布
- MLE for 3 次元 FB 分布
- MLE for 4 次元 FB 分布
- MLE for 5 次元 FB 分布
- MLE for 6 次元 FB 分布
- MLE for 7 次元 FB 分布
- 上記の C プログラムを生成する Risa/Asir
のプログラム pfn_gen_c_2.rr ,
pfaffian.rr
- ある点における FB 分布の正規化定数をべき級数展開とHGMにより計算する C プログラム
- プログラム ko-fbd-main.c ,
ko-fbd-ps.c ,
ko-fbd-rk.c ,
ko-fbd.c ,
ko-fbd.h ,
ko-io.c ,
ko-io.h ,
ko-time.c ,
ko-time.h ,
perturbation.c ,
ko-perturbation.h ,
プログラムパッケージ fb2_package.tar をダウンロードし,
それを展開すると fb2_package というディレクトリができるので,
そこに移動し make を実行すればよい.
具体的には次のように行えば良い.
$ tar -xvf fb2_package.tar
$ cd fb2_package
$ make
ただし,
プログラムをコンパイルするには Gnu Scientific Library (GSL)
がコンピュータにインストールされている必要がある.
コンパイルが終了すると,
プログラム s1_wind, s2_astro, s2_mag, s3_e1, s4_e1, s5_e1, s6_e1, s7_e1 が生成される.
これらプログラムを実行するには,
$ ./s1_wind
r*r = 2.797256
ii = 0, s = 1.000000 -> 2.797256
return of the function fbnd:
[ 11.6189, 5.60018, 1.30144, 6.89219]
... 計算が実行される.
のようにコマンド打てばよい.
上記の C プログラムを生成する Risa/Asir のプログラム pfn_gen_c_2.rr について
上記プログラムの元になる C コードを生成する Risa/Asir
のプログラムが pfn_gen_c_2.rr
(pfn_gen_c_2.rr を使うには pfaffian.rr が必要)
使い方は以下のとおりである.
Risa/Asir を起動して次のような命令を打ち込んでいく.
$ asir <--- Asir の起動
This is Risa/Asir, Version 20110824 (Kobe Distribution).
... Asir の起動メッセージが表示
[1630] load("pfn_gen_c_2.rr");
[1886] pfn_gen_c_2(1); /* s1_wind.c s1_wind.h の元になるプログラム test1.c test1.h を生成 */
generate test1.h
generate test1.c
1
[1887] pfn_gen_c_2(3); /* s3_wind.c s3_wind.h の元になるプログラム test3.c test3.h を生成 */
generate test3.h
generate test3.c
1
[1888]
こうして C プログラム test1.c (1 次元 Fisher-Bingham 分布の最尤推定のための C プログラム) が生成される.
そして test1.c の main 関数中の
/* Write data here. */
/* g_x11, g_x12, g_x22, g_y1, g_y2 */
/* g_s11, g_s12, g_s22, g_s1, g_s2 */
の部分に初期位置 g_x11, g_x12, g_x22, g_y1, g_y2 を書き,
観測値 g_s11, g_s12, g_s22, g_s1, g_s2 を書く.
例えば,
g_x11 = 0.5; g_x12 = 0.5; g_x22 = 0.15; g_y1 = 1; g_y2 = 0.15; g_r = 1.0;
g_s11 = 0.662125; g_s12 = 0.274563; g_s22 = 0.337875; g_s1 = 0.317564; g_s2 = -0.020188;
と書く.
コンパイルはMakefileの
#test1: test1.c test1.h ${ko-initial-objs}
# $(CC) test1.c ${ko-initial-objs} ${libs_gsl} -lm -o $@
の部分のコメントアウトを外し
$make test1
で行なうことができる.
Fisher-Bingham 積分の値を計算する C プログラム ko-fbd.c について
ko-fbd の マニュアル を見よ.