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 
>