[ in English ]

n 次元 Fisher-Bingham 分布に対する最尤推定

C のプログラムと計算結果

n 次元 Fisher-Bingham 分布に対する最尤推定についてのプログラムパッケージ fb2_package.tar . このパッケージの中身は次のようなプログラム(計算結果のファイル (*.log) は含まない)からなる. プログラムパッケージ 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 の マニュアル を見よ.