module Nla: sig end
Numerical linear algebra routines.
|
This module provides a stylized high-level interface to the Fortran library Lapack and its associated C library CBLAS. This interface tries to make numerical linear algebra programs look like they were written in the conventional linear algebra mathematics notation, without sacrificing speed or memory efficiency. It also tries to insulate the user from the convoluted and bug-prone interface provided by Lapack. For that we depend to a great extent on the static type checking of OCaml, and, to a lesser extent dynamic runtime type checking. The design borrows a lot from Matlab, but tries to stick to the OCaml way of doing things. Some parts might take some getting used to. The library has been used extensively to code, test and time my own research algorithms. So it is battle-hardened to some extent. User feedback is welcome. You can catch me at shiv@ece.ucsb.edu.
There is a lower-level interface that mimics the exact calling interface of Lapack and CBLAS, but that is not documented here. In fact that interface will hopefully become Lacaml at some point. A tutorial to help familiarize yourself with this library is also available. This package is very similar to the library CleanFloat for the Clean functional programming language.
Of course efficiency depends a great deal on controlling memory
usages. So CamlFloat tries to be faithful to the underlying
philosophy of Lapack. Almost all computations destroy incoming
matrices (two-dimensional arrays in essence). This is quite unlike
Matlab where almost always copies are made internally. This is
rather nice for newbies, but rather useless for bigger
projects. However, to warn users of potential side-effects, we try
to follow one of two conventions. If a function destroys any
incoming date it will either have a unit return type, or, it will
have a name that is terminated by a single open quote. Both of these
conventions are common in the OCaml-world.
CamlFloat also allows you to write generic code that is capable of
being executed in real single, real double, complex single and
complex double precision arithmetic. In standard OCaml form we
achieve this using functors. To help in this regard all routines
are placed in four modules that share the common signature
BLOP. Examples of such generic functors can be found by digging
around in the source files. Interestingly enough the package
CleanFloat achieves the same effect by using Clean's type classes.
Author(s): Shivkumar Chandrasekaran, William Lyons
module type BLOP = sig end
The Real and Complex Modules
|
module DBlop: sig endmodule SBlop: sig endmodule ZBlop: sig endmodule CBlop: sig end