Directory|Libraries|E-learning|Directions|Jobs|Calendar|U tv|Contact
UMONS>Faculty of Science>Department of Mathematics>Numerical Analysis Team>Software


On this page, you will find libraries for the OCaml (Objective Caml) language, a strongly typed functional language with great abstraction and performance characteristics.


Lacaml is a binding to the famous BLAS and LAPACK libraries which offer linear algebra routines. It is developed in collaboration with Markus Mottl and several other people. To use it you should be familiar with BLAS and LAPACK. The following quick reference guide for the BLAS, LAPACK quick reference, and LAPACK Documentation may be useful to you. For the precise description of the functions, consult the man pages online or, if you installed them on your machine (if you use Linux, they should be in the packages of your distribution), read them with Emacs: M-x man (under Unix) ou M-x woman (all systems; you must first set

(add-to-list 'woman-manpath "C:/path/to/lapack/manpages/blas/man")
(add-to-list 'woman-manpath "C:/path/to/lapack/manpages/man")
in your ~/.emacs).

Delimited overloading

Delimited overloading (pa_do) is a syntax extension (thanks to camlp4) to allow (an extensible) operator and function overloading in OCaml. It also performs some optimizations, for example for expressions involving complex numbers.

OCaml odepack

OCaml odepack is a binding to odepack, a collection of solvers for the initial value problem for ordinary differential equation systems.


Mesh is a simple module allowing to call various 2D mesh generators (in particular triangle) in a unified fashion. It also provides useful functions to visualize the mesh as well as P1 functions defined on it.


The module lbfgs is a binding to the L-BFGS-B FORTRAN code. It is a limited-memory quasi-Newton code for unsconstrained and bound-constrained optimization.

1D integration

The module Integration1D gathers various integration routines inspired from QUADPACK. This is pure OCaml code.

1D optimization

The findlib package optimization1d is made of two modules, Min1D and Max1D, that provide functions to seek minimums or maximums of mathematical functions f : R → R. This is pure OCaml code.

1D root finding

The module Root1D provides functions, in particular Brent's method, to seek roots of mathematical functions f : R → R. This is pure OCaml code.

Module FFTW 3

The Fftw3 module is a binding to the famous fast Fourier transform library FFTW.

The bindings to the old FFTW2 library are not longer developed.


oasis2opam is a Tool to convert OASIS metadata to OPAM package descriptions.

OCaml Lego Mindstorm library

The Mindstorm module allows to control Lego® Mindstorm NXT bricks through the bluetooth protocol. It was used by three students in mathematics to program two robots: the first finds its way out of a maze and the second solves the Rubik's cube. You can read their interview (in French).


OCaml CSV is a module to read and write CSV (comma separated values) files. It understands Excel peculiarities (which do not conform to the standard).


Benchmark is a module to measure and compare running times of functions written in OCaml.

Rope library

The Rope module implements the "rope datastructure", an efficient immutable equivalent of strings. This module is ready to replace String for most applications.


OCamlDBI is a generic interface to databases inspired by Perl DBI.


The Freetds module offers a binding to the DB-lib API of FreeTDS as well as a deprecated binding to ct. It is recommended to use OCamlDBI (which uses this module as a driver) to benefit for higher level functions.


The Lpd (Line Printer Deamon) library is a server for the LPD protocol completely written in OCaml (and therefore fully working on windows).


ANSITerminal is a module allowing to use the colors and cursor movements on ANSI terminals. Here is its interface.


OCaml-gnuplot is a module which uses gnuplot to graph scientific data from OCaml.

This module is obsolete and only bugs will be corrected. It will be replaced by Archimedes (under development) which does not depend anymore on gnuplot.