mirror of
https://github.com/boostorg/ublas.git
synced 2026-02-20 15:12:16 +00:00
403 lines
14 KiB
HTML
403 lines
14 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html>
|
|
<head>
|
|
|
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
|
|
|
|
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
|
|
<title>Boost Basic Linear Algebra</title>
|
|
</head>
|
|
<body bgcolor="#ffffff">
|
|
|
|
<h1><img src="c++boost.gif" alt="c++boost.gif" align="Center">
|
|
Basic Linear Algebra</h1>
|
|
|
|
<p>uBLAS is a C++ template class library that provides <a href="http://www.netlib.org/blas">
|
|
BLAS</a>
|
|
level 1, 2, 3 functionality for dense, packed and sparse matrices. The
|
|
design and implementation unify mathematical notation via operator overloading
|
|
and efficient code generation via expression templates. </p>
|
|
|
|
<h2>Functionality</h2>
|
|
|
|
<p>uBLAS provides templated C++ classes for dense, unit and sparse vectors,
|
|
dense, identity, triangular, banded, symmetric, hermitian and sparse matrices.
|
|
Views into vectors and matrices can be constructed via ranges or slices
|
|
and adaptor classes. The library covers the usual basic linear algebra operations
|
|
on vectors and matrices: reductions like different norms, addition and subtraction
|
|
of vectors and matrices and multiplication with a scalar, inner and outer
|
|
products of vectors, matrix vector and matrix matrix products and triangular
|
|
solver. The glue between containers, views and expression templated operations
|
|
is a mostly <a href="http://www.sgi.com/tech/stl">STL</a>
|
|
conforming iterator interface.</p>
|
|
|
|
<p>Dense, packed and sparse matrix classes are being tested with the <a href="http://www.netlib.org/clapack">
|
|
CLAPACK</a>
|
|
test suite.</p>
|
|
|
|
<p>Known limitations:</p>
|
|
|
|
<ul type="Disc">
|
|
<li>The implementation assumes a linear memory address model.</li>
|
|
<li>Tuning was focussed on dense matrices.</li>
|
|
|
|
</ul>
|
|
|
|
<h2>Documentation</h2>
|
|
|
|
<ul>
|
|
<li><a href="overview.htm">Overview</a>
|
|
</li>
|
|
<li><a href="expression.htm">Expression Concepts</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="expression.htm#scalar_expression">Scalar
|
|
Expression</a>
|
|
</li>
|
|
<li><a href="expression.htm#vector_expression">Vector
|
|
Expression</a>
|
|
</li>
|
|
<li><a href="expression.htm#matrix_expression">Matrix
|
|
Expression</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="container.htm">Container Concepts</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="container.htm#vector">Vector</a>
|
|
</li>
|
|
<li><a href="container.htm#matrix">Matrix</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="iterator.htm">Iterator Concepts</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="iterator.htm#indexed_bidirectional_iterator">
|
|
Indexed Bidirectional Iterator</a>
|
|
</li>
|
|
<li><a href="iterator.htm#indexed_random_access_iterator">
|
|
Indexed Random Access Iterator</a>
|
|
</li>
|
|
<li><a href="iterator.htm#indexed_bidirectional_cr_iterator">
|
|
Indexed Bidirectional Column/Row Iterator</a>
|
|
</li>
|
|
<li><a href="iterator.htm#indexed_random_access_cr_iterator">
|
|
Indexed Random Access Column/Row Iterator</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="storage.htm">Storage</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="storage.htm#unbounded_array">Unbounded
|
|
Array</a>
|
|
</li>
|
|
<li><a href="storage.htm#bounded_array">Bounded Array</a>
|
|
</li>
|
|
<li><a href="storage.htm#range">Range</a>
|
|
</li>
|
|
<li><a href="storage.htm#slice">Slice</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="storage_sparse.htm">Sparse Storage</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="storage_sparse.htm#map_array">Map Array</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="vector.htm">Vector</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="vector.htm#vector">Vector</a>
|
|
</li>
|
|
<li><a href="vector.htm#unit_vector">Unit Vector</a>
|
|
</li>
|
|
<li><a href="vector.htm#zero_vector">Zero Vector</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="vector_sparse.htm">Sparse Vector</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="vector_sparse.htm#sparse_vector">Sparse
|
|
Vector</a>
|
|
</li>
|
|
<li><a href="vector_sparse.htm#compressed_vector">Compressed
|
|
Vector</a>
|
|
</li>
|
|
<li><a href="vector_sparse.htm#coordinate_vector">Coordinate
|
|
Vector</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="vector_proxy.htm">Vector Proxies</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="vector_proxy.htm#vector_range">Vector
|
|
Range</a>
|
|
</li>
|
|
<li><a href="vector_proxy.htm#vector_slice">Vector
|
|
Slice</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="vector_expression.htm">Vector Expressions</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="vector_expression.htm#vector_expression">Vector
|
|
Expression</a>
|
|
</li>
|
|
<li><a href="vector_expression.htm#vector_references">Vector
|
|
References</a>
|
|
</li>
|
|
<li><a href="vector_expression.htm#vector_operations">Vector
|
|
Operations</a>
|
|
</li>
|
|
<li><a href="vector_expression.htm#vector_reductions">Vector
|
|
Reductions</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="matrix.htm">Matrix</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="matrix.htm#matrix">Matrix</a>
|
|
</li>
|
|
<li><a href="matrix.htm#identity_matrix">Identity
|
|
Matrix</a>
|
|
</li>
|
|
<li><a href="matrix.htm#zero_matrix">Zero Matrix</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="triangular.htm">Triangular Matrix</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="triangular.htm#triangular_matrix">Triangular
|
|
Matrix</a>
|
|
</li>
|
|
<li><a href="triangular.htm#triangular_adaptor">Triangular
|
|
Adaptor</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="symmetric.htm">Symmetric Matrix</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="symmetric.htm#symmetric_matrix">Symmetric
|
|
Matrix</a>
|
|
</li>
|
|
<li><a href="symmetric.htm#symmetric_adaptor">Symmetric
|
|
Adaptor</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="hermitian.htm">Hermitian Matrix</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="hermitian.htm#hermitian_matrix">Hermitian
|
|
Matrix</a>
|
|
</li>
|
|
<li><a href="hermitian.htm#hermitian_adaptor">Hermitian
|
|
Adaptor</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="banded.htm">Banded Matrix</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="banded.htm#banded_matrix">Banded Matrix</a>
|
|
</li>
|
|
<li><a href="banded.htm#banded_adaptor">Banded
|
|
Adaptor</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="matrix_sparse.htm">Sparse Matrix</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="matrix_sparse.htm#sparse_matrix">Sparse
|
|
Matrix</a>
|
|
</li>
|
|
<li><a href="matrix_sparse.htm#compressed_matrix">Compressed
|
|
Matrix</a>
|
|
</li>
|
|
<li><a href="matrix_sparse.htm#coordinate_matrix">Coordinate
|
|
Matrix</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="matrix_proxy.htm">Matrix Proxies</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="matrix_proxy.htm#matrix_row">Matrix Row</a>
|
|
</li>
|
|
<li><a href="matrix_proxy.htm#matrix_column">Matrix
|
|
Column</a>
|
|
</li>
|
|
<li><a href="matrix_proxy.htm#vector_range">Vector
|
|
Range</a>
|
|
</li>
|
|
<li><a href="matrix_proxy.htm#vector_slice">Vector
|
|
Slice</a>
|
|
</li>
|
|
<li><a href="matrix_proxy.htm#matrix_range">Matrix
|
|
Range</a>
|
|
</li>
|
|
<li><a href="matrix_proxy.htm#matrix_slice">Matrix
|
|
Slice</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
<li><a href="matrix_expression.htm">Matrix Expressions</a>
|
|
|
|
<ul type="Circle">
|
|
<li><a href="matrix_expression.htm#matrix_expression">Matrix
|
|
Expression</a>
|
|
</li>
|
|
<li><a href="matrix_expression.htm#matrix_references">Matrix
|
|
References</a>
|
|
</li>
|
|
<li><a href="matrix_expression.htm#matrix_operations">Matrix
|
|
Operations</a>
|
|
</li>
|
|
<li><a href="matrix_expression.htm#matrix_vector_operations">
|
|
Matrix Vector Operations</a>
|
|
</li>
|
|
<li><a href="matrix_expression.htm#matrix_matrix_operations">
|
|
Matrix Matrix Operations</a>
|
|
</li>
|
|
|
|
</ul>
|
|
</li>
|
|
|
|
</ul>
|
|
|
|
<h2>Supported Platforms</h2>
|
|
|
|
<p>As main development platform for uBLAS we used MSVC 6.0 with Dinkumware
|
|
STL. Other compilers known to accept the library are</p>
|
|
|
|
<ul>
|
|
<li>MSVC 6.0 with STLPort-4.5.3</li>
|
|
<li>BCC 5.5</li>
|
|
<li>GCC 2.95.x, 3.0.x, 3.1</li>
|
|
<li>ICC 5.0, 6.0</li>
|
|
<li>Comeau 4.2.x</li>
|
|
<li>MWCW</li>
|
|
|
|
</ul>
|
|
|
|
<h2>Download</h2>
|
|
|
|
<p>You can download the current stable release of the source code from <a href="http://www.genesys-e.org/ublas/downloads/ublas.zip">
|
|
here</a>
|
|
. Prerequisite is the latest stable release of the <a href="http://www.boost.org">
|
|
Boost</a>
|
|
libraries Configuration, Timer and optionally SmartPointer.</p>
|
|
|
|
<h2>CVS Access</h2>
|
|
|
|
<p>You can also check out the latest version via anonymous CVS. Here's how:
|
|
</p>
|
|
|
|
<pre> cvs -d:pserver:anonymous@cvs.boost.sourceforge.net:/cvsroot/boost login<br> (password is empty)<br> cvs -d:pserver:anonymous@cvs.boost.sourceforge.net:/cvsroot/boost checkout boost/boost/numeric/ublas<br> cvs -d:pserver:anonymous@cvs.boost.sourceforge.net:/cvsroot/boost checkout boost/libs/numeric/ublas</pre>
|
|
|
|
<p>If you have gzip installed on your system, you can speed up the transfer
|
|
using</p>
|
|
|
|
<pre> cvs -d:pserver:anonymous@cvs.boost.sourceforge.net:/cvsroot/boost -z9 checkout boost/boost/numeric/ublas<br> cvs -d:pserver:anonymous@cvs.boost.sourceforge.net:/cvsroot/boost -z9 checkout boost/libs/numeric/ublas</pre>
|
|
|
|
<p>You can also <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/boost">
|
|
view</a>
|
|
the CVS archive. You may find the library <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/boost/boost/boost/numeric/ublas/">
|
|
here</a>
|
|
. Documentation and test programs reside <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/boost/boost/libs/numeric/ublas/">
|
|
here</a>
|
|
.</p>
|
|
|
|
<h2>Mailing lists</h2>
|
|
|
|
<p>uBLAS has no dedicated mailing list. Feel free to use the mailing lists
|
|
of <a href="http://www.boost.org">Boost</a>
|
|
.</p>
|
|
|
|
<h2>Authors and Credits</h2>
|
|
|
|
<p>uBLAS initially was written by Joerg Walter and Mathias Koch. We would
|
|
like to thank all, which supported the development of this library: David
|
|
Abrahams, Ed Brey, Fernando Cacciola, Juan Jose Gomez Cadenas, Beman Dawes,
|
|
Bob Fletcher, Kresimir Fresl, Joachim Kessel, Toon Knapen, John Maddock,
|
|
Jens Maurer, Alexei Novakov, Gary Powell, Joachim Pyras, Peter Schmitteckert,
|
|
Jeremy Siek, Markus Steffl, Michael Stevens, Benedikt Weber, Martin Weiser,
|
|
Marc Zimmermann and the members of <a href="http://www.boost.org">Boost</a>
|
|
</p>
|
|
|
|
<h2>Frequently Asked Questions</h2>
|
|
|
|
<p>Q: I'm running the uBLAS dense vector and matrix benchmarks. Why do I
|
|
see a significant performance difference between the native C and library
|
|
implementations?<br>
|
|
A: uBLAS distinguishes debug mode (size and type conformance checks enabled,
|
|
expression templates disabled) and release mode (size and type conformance
|
|
checks disabled, expression templates enabled). Please check, if the preprocessor
|
|
symbol <code>NDEBUG</code> of <code>cassert</code> is defined. <code>NDEBUG</code>
|
|
enables release mode, which in turn uses expression templates.</p>
|
|
|
|
<p>Q: I've written some uBLAS tests, which try to incorrectly assign different
|
|
matrix types or overrun vector and matrix dimensions. Why don't I get a
|
|
compile time or runtime diagnostic?<br>
|
|
A: uBLAS distinguishes debug mode (size and type conformance checks enabled,
|
|
expression templates disabled) and release mode (size and type conformance
|
|
checks disabled, expression templates enabled). Please check, if the preprocessor
|
|
symbol <code>NDEBUG</code> of <code>cassert</code> is defined. <code>NDEBUG</code>
|
|
disables debug mode, which is needed to get size and type conformance
|
|
checks.</p>
|
|
|
|
<p>Q: I've written some uBLAS benchmarks to measure the performance of matrix
|
|
chain multiplications like <code>prod (A, prod (B, C))</code> and see a
|
|
significant performance penalty due to the use of expression templates.
|
|
How can I disable expression templates?<br>
|
|
A: You do not need to disable expression templates. Please try reintroducing
|
|
temporaries using either <code>prod (A, </code><code><em>matrix_type</em></code><code>
|
|
(prod (B, C)))</code> or <code>prod (A, prod<</code><code><em>matrix_type</em></code><code>
|
|
> (B, C))</code>.</p>
|
|
|
|
<h2>Contact Information</h2>
|
|
|
|
<p>If you have a problem, or have found a bug, please send us a <a href="mailto:ublas@genesys-e.org">
|
|
note</a>
|
|
. </p>
|
|
|
|
<hr>
|
|
<p>Copyright (©) 2000-2002 Joerg Walter, Mathias Koch <br>
|
|
Permission to copy, use, modify, sell and distribute this document is
|
|
granted provided this copyright notice appears in all copies. This document
|
|
is provided ``as is'' without express or implied warranty, and with no claim
|
|
as to its suitability for any purpose.</p>
|
|
|
|
<p>Last revised: 1/15/2003</p>
|
|
|
|
</body>
|
|
</html>
|