
This is an interface to GSL (GNU scientific library), for the
Objective Caml langage. 


* REQUIREMENTS
- gsl >= 1.3
- ocaml >= 3.06
- A somehow recent C compiler (The C stubs use some C99 features) :
  gcc version >= 3 is fine, older gcc can work too, see instuctions
  below.
- awk, grep and GNU make


* BUILDING & INSTALLING
- if you have a gcc version < 3 :
  make old_gcc 
- make
- (optional) make install INSTALLDIR=/absolute/path/to/installdir 

to link :
  ocamlopt -I gsldir bigarray.cmxa gsl.cmxa my_prog.ml
or :
  ocamlc -I gsldir -dllpath gsldir bigarray.cma gsl.cma my_prog.ml


* CHANGES
since 0.2.1 :
  - sync with GSL 1.3
    - new multidimensional minimizer (Nelder Mead Simplex algorithm)
    - new random distributions : Dirichlet and multinomial
    - new function Gsl_math.fcmp for approximate floating point values
    comparisons
  - fixed some potential problems with the GC
since 0.2 :
  - Gsl_linalg.matmult is now Gsl_linalg.matmult
  - Gsl_matrix.mul is now Gsl_matrix.mul_elements (same for
  Gsl_matrix.div)
  - vector/matrix macros work with gcc 2.9x (old_gcc target
  in Makefile) 
since 0.1.1 :
  - rewrote the vector/matrix modules to add single precision
  bigarrays and complex values
  - added complex functions in Gsl_linalg and Gsl_eigen
  - added Ordinary Differential Equations
  - added Simulated Annealing
  - added Statistics and Histograms
since 0.1 :
  - fixed install target in Makefile
  - fixed several C stub function names
  - fixed a bug in ext_quot in quot.ml


WARNING : the code is not heavily tested !


* DOCUMENTATION
Check the GSL manual ! You can browse the module interfaces with the
ocamldoc-generated HTML files in the doc/ directory.


* VECTOR / MATRICES
There are several datatypes for handling vectors and matrices.

 - modules Gsl_vector, Gsl_vector.Single, Gsl_vector_complex,
   Gsl_vector_complex.Single and the corresponding matrix modules use
   bigarrays with single or double precisions real or complex values.

 - modules Gsl_vector_flat, Gsl_vector_complex_flat and the
   corresponding matrix modules use a record wrapping a regular caml
   float array. This is the equivalent of the gsl_vector and
   gsl_matrix structs in GSL.

 - module Gsl_vectmat defines a sum type with polymorphic variants
   that regroups these two representations. For instance :

     Gsl_vectmat.v_add (`V v1) (`VF v2)

   adds a vector in a caml array to a bigarray.

  - modules Gsl_blas Gsl_blas_flat and Gsl_blas_gen provide a (quite
    incomplete) interface to CBLAS for these types.

* ERROR HANDLING
Error in GSL functions are reported as exceptions :
  Gsl_error.Gsl_exn (errno, msg)
You have to call Gsl_error.init () so as to initialize error
reporting; otherwise, the default GSL error handler is used and aborts
the program, leaving a core dump (not so helpful with caml).

Callback (for minimizers, solvers, etc.) should avoid raising
exceptions : these are most of the time converted to NaNs, but
in some cases they would abort the program.
