Evaluating the normalizing constant of the Fisher-Bingham distribution
by the HGM and solving MLE problems by the HGD
Programs and data used in the paper
``T. Koyama, H. Nakayama, K. Nishiyama, N. Takayama,
Holonomic Gradient Descent for the Fisher-Bingham Distribution on the n-dimensional Sphere,
arxiv:1201.3239 ''
are
here (fb2.zip) in the zip format.
In order to compile and execute them,
you need the Gnu Scientific Library (GSL)
and
R software .
( Risa/Asir ,
contained in the openxm package, is optimal to execute .rr programs.)
Sample data used in the paper are in the folder fb2/ex in the zip file.
An example on S^3 (the problem s3_e1 in the paper)
The data file of this example is fb2/ex/s3-e1.samp.
<-- unzip fb2.zip
cd fb2
make all
R <-- start R
> source("s_test.r");
> call_s3_e1();
Read 17 items <-- 1st step by ko-initial and optim()
[1] 26.21370 -3.76030 1.70057 3.39803 5.16930 5.25944 4.58366 8.34724
[1] 23.5735
Read 17 items
[1] 26.72370 -3.91633 1.72777 3.44281 5.24418 5.48767 4.65147 8.45515
[1] 23.68049
Read 17 items
[1] 26.18900 -3.73436 1.65283 3.39216 5.16862 5.25063 4.57549 8.34269
[1] 23.58164
....
Read 17 items
[1] 46.66620 1.89242 3.51563 9.26612 -9.51110 6.50483 8.77901 15.13790
[1] 10.08021
<-- The output of optim() is in the file s3_e1_pos_r.
FR method <-- 2nd step by HGD (C program s3_e1)
pos[0] = -2.108446
pos[1] = -0.814766
pos[2] = -3.796403
pos[3] = 0.753867
.... snip
1, -2.10603, -0.817113, -3.79343, 0.748836, -1.15559, -0.125705, 4.16824, 1.01524, -0.543168, 1.05994, 1.18925, 1.28324, 0.893618, -1.14147, 10.0525
points = [-2.10603, -0.817113, -3.79343, 0.748836, -1.15559, -0.125705, 4.16824, 1.01524, -0.543168, 1.05994, 1.18925, 1.28324, 0.893618, -1.14147]
values = [10.0525, 0.47601, 0.703612, 1.82723, -2.11336, 1.41809, 1.87452, 3.20026]
grad : -0.142887 0.141284 -0.178817 0.299841 0.013521 0.012832 -0.129449 -0.020050 -0.000856 0.149416 -0.169592 -0.107367 0.291957 -0.108757
norm(grad): 0.582620
2, -2.10121, -0.821808, -3.78748, 0.738776, -1.15595, -0.126147, 4.17259, 1.01583, -0.542996, 1.05488, 1.19527, 1.28701, 0.883296, -1.13746, 10.0413
points = [-2.10121, -0.821808, -3.78748, 0.738776, -1.15595, -0.126147, 4.17259, 1.01583, -0.542996, 1.05488, 1.19527, 1.28701, 0.883296, -1.13746]
values = [10.0413, 0.497838, 0.714846, 1.7884, -2.08791, 1.42095, 1.87727, 3.19244]
grad : -0.138283 0.141407 -0.178792 0.294271 0.018362 0.011912 -0.126660 -0.024261 0.007705 0.144182 -0.147041 -0.095226 0.254850 -0.085553
norm(grad): 0.546439
.... snip
norm(grad): 0.001030
Minimum found <--
73, -1.22533, -1.10699, -2.63975, -0.0812375, -1.85274, 0.00702786, 5.35051, 1.31406, -0.929157, 0.577568, 0.887881, 1.65851, 0.593832, -1.31242, 9.58807
points = [-1.22533, -1.10699, -2.63975, -0.0812375, -1.85274, 0.00702786, 5.35051, 1.31406, -0.929157, 0.577568, 0.887881, 1.65851, 0.593832, -1.31242] <-- the optimum point
values = [9.58807, 0.615897, 0.773816, 1.46424, -1.91159, 1.48891, 1.77486, 3.07148] <-- the optimum value
grad : 0.000061 0.000164 -0.000315 -0.000037 -0.000148 -0.000176 -0.000431 -0.000033 -0.000299 0.000121 0.000125 0.000307 -0.000101 0.000390
norm(grad): 0.000864
search_min :
[9.58807, 0.615897, 0.773816, 1.46424, -1.91159, 1.48891, 1.77486, 3.07148]
time(search_min) : 3.240000
... snip
>