The Hilbert Class Library

Reference Manual
Tutorial Guides
The Hilbert Class Library (HCL) is a collection of C++ classes representing basic mathematical objects such as vectors, linear and nonlinear operators, and functions. HCL also provides algorithms for optimization and linear algebra implemented in terms of these basic classes. The object oriented design of HCL permits algorithms to be coded at a natural level of abstraction, without reference to internal details of data structures and simulators. Because coordinate representations, data storage formats, and other domain-specific idiosyncrasies are not entangled in these implementations, the resulting code is reusable across applications of widely varying size and structure. The design of HCL also results in several very important capabilities, such as the ability to treat very large out-of-core data sets as vector objects, and to manipulate linear operators not defined explicitly by matrices, which distinguish HCL from other object oriented numerics libraries.

Version 1.0 is the first production release of HCL. It provides a reference manual in web browser format with ``man pages'' for all of the classes. We also include a tutorial consisting of (1) two reports describing via detailed examples the construction of HCL function and operator classes from numerical kernels, and (2) complete examples with extensively annotated main programs, using the classes described in the reports to solve scientific computation problems.

For several reasons, matrix manipulations are important in HCL. For example, several important algorithms (such as Arnoldi eigenvalue approximation and Kennett subspace optimization) use matrix algebra even though the problems solved by these algorithms need not be posed in matrix terms at all. Also the ability to view matrices as operators on fairly general types of vectors is critical in some applications, even though HCL operators need not be defined in this way. For these reasons, HCL1.0 depends on a matrix library and on a collection of wrapper classes which make the matrix routines accessible as C++ class methods. The matrix library included with HCL1.0 is called dustydecks, and consists of Fortran routines extracted from ARPACK, LAPACK, and other public domain packages. The wrapper library is called matrix. See the README files in these directories.

When the development of HCL began in the mid '90s, only a few C++ compilers implemented anything like the full ISO standard. For this reason, we have avoided up to now dependence on ``advanced'' features of the standard such as templated classes, exception handling, and dynamic casts. In particular all HCL classes exist in two versions, corresponding to the two arithmetic precisions provided by C++. The single precision versions (*_s.*, in hcls) are text-processed from the double precision versions (*_d.*, in hcld); we have treated the wrapper matrix classes similarly (matrixs and matrixd). In a few places we also use simple ad hoc container classes. A future version of HCL may template the classes on the underlying number fields, incorporate standard exception handling and type-safe casting, and replace the ad hoc containers with classes from the Standard Template Library.

For an extended discussion of the design and use of HCL, see An Overview of HCL1.0, an update of our paper in ACM Transactions on Mathematical Software, 25 pp. 191-212 (1999).

We welcome bug reports, comments, and suggestions. Please contact us at

Mark S. Gockenbach and William W. Symes

alphabetic index hierarchy of classes

this page has been generated automatically by doc++

(c)opyright by Malte Zöckler, Roland Wunderling