mirror of
https://github.com/boostorg/ublas.git
synced 2026-02-15 01:22:10 +00:00
393 lines
12 KiB
HTML
393 lines
12 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
|
<html>
|
|
<head>
|
|
<meta name="generator" content="HTML Tidy, see www.w3.org">
|
|
<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, 7.0, 7.1</li>
|
|
|
|
<li>BCC 5.5</li>
|
|
|
|
<li>GCC 2.95.x, 3.0.x, 3.1.x, 3.2.x, 3.3.x</li>
|
|
|
|
<li>ICC 5.0, 6.0, 7.0, 7.1</li>
|
|
|
|
<li>Comeau 4.2.x</li>
|
|
|
|
<li>MWCW</li>
|
|
</ul>
|
|
|
|
<p>For possible problems please consider to consult the Boost
|
|
regression tests.</p>
|
|
|
|
<h2>Download</h2>
|
|
|
|
<p>You can download the latest release of the source code from <a
|
|
href="http://groups.yahoo.com/group/ublas-dev/files">here</a> .
|
|
Prerequisite is the latest stable release of the <a href=
|
|
"http://www.boost.org">Boost</a> libraries Configuration,
|
|
MetaProgramming, TypeTraits, 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 a dedicated <a href=
|
|
"http://groups.yahoo.com/group/ublas-dev">mailing list</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 and contributed to the development
|
|
of this library: David Abrahams, Ed Brey, Fernando Cacciola, Juan Jose
|
|
Gomez Cadenas, Beman Dawes, Matt Davies, Bob Fletcher, Kresimir Fresl,
|
|
Joachim Kessel, Patrick Kowalzick, Toon Knapen, Hendrik Kueck, John Maddock,
|
|
Jens Maurer, Alexei Novakov, Gary Powell, Joachim Pyras,
|
|
Peter Schmitteckert, Jeremy Siek, Markus Steffl, Michael Stevens,
|
|
Benedikt Weber, Martin Weiser, Gunter Winkler, 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>
|
|
|
|
<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>
|
|
|