| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" |
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> |
| <html xmlns="http://www.w3.org/1999/xhtml"> |
| <head> |
| <meta http-equiv="Content-Type" content="text/html; charset=us-ascii" /> |
| <link rel="stylesheet" href="../../../../boost.css" type="text/css"/> |
| <link rel="stylesheet" href="ublas.css" type="text/css" /> |
| <script type="text/javascript" src="js/jquery-1.3.2.min.js" async="async" ></script> |
| <script type="text/javascript" src="js/jquery.toc-gw.js" async="async" ></script> |
| <title>Boost Basic Linear Algebra</title> |
| </head> |
| <body> |
| <h1><img src="../../../../boost.png" align="middle" alt="logo"/>Basic Linear Algebra Library</h1> |
| <div class="toc" id="toc"></div> |
| |
| <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, slices, |
| adaptor classes and indirect arrays. 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>Please consult the <a href="release_notes.htm">release notes</a> for details on the latest changes.</p> |
| |
| <h2>Documentation</h2> |
| |
| <ul> |
| <li><big><a href="overview.htm">Overview</a></big> |
| <ul> |
| <li><a href="overview.htm#rationale">Rationale</a> |
| </li> |
| |
| <li><a href="overview.htm#functionality">Functionality</a> |
| </li> |
| |
| <li><a href="types_overview.htm">Overview of Matrix- and Vector-Types</a> |
| </li> |
| |
| <li><a href="operations_overview.htm">Overview of Matrix and Vector Operations</a> |
| </li> |
| |
| <li><a href="#further_information">Effective uBLAS and further information</a> |
| </li> |
| |
| <li><a href="options.htm">Macros and Preprocessor Options</a> |
| </li> |
| </ul> |
| </li> |
| |
| <li><a href="vector.htm">Vector</a> |
| <ul> |
| <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> |
| |
| <li><a href="vector.htm#scalar_vector">Scalar Vector</a> |
| </li> |
| </ul> |
| </li> |
| |
| <li><a href="vector_sparse.htm">Sparse Vector</a> |
| <ul> |
| <li><a href="vector_sparse.htm#mapped_vector">Mapped 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> |
| <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> |
| <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> |
| <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> |
| |
| <li><a href="matrix.htm#scalar_matrix">Scalar Matrix</a> |
| </li> |
| </ul> |
| </li> |
| |
| <li><a href="triangular.htm">Triangular Matrix</a> |
| <ul> |
| <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> |
| <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> |
| <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> |
| <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> |
| <li><a href="matrix_sparse.htm#mapped_matrix">Mapped 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> |
| <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> |
| <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> |
| |
| <li>Storage and special containers |
| |
| <ul> |
| <li><a href="unbounded_array.htm">Unbounded Array</a> |
| </li> |
| |
| <li><a href="bounded_array.htm">Bounded Array</a> |
| </li> |
| |
| <li><a href="range.htm#range">Range</a> |
| </li> |
| |
| <li><a href="range.htm#slice">Slice</a> |
| </li> |
| </ul></li> |
| |
| <li><a href="storage_sparse.htm">Sparse Storage</a> |
| <ul> |
| <li><a href="storage_sparse.htm#map_std">Default Standard Map</a> |
| </li> |
| |
| <li><a href="storage_sparse.htm#map_array">Map Array</a> |
| </li> |
| </ul> |
| </li> |
| |
| <li>Operations & Functions |
| |
| <ul> |
| <li><a href="products.htm">Special Products</a> |
| </li> |
| |
| <li><a href="blas.htm">BLAS</a> |
| </li> |
| </ul></li> |
| |
| <li>uBLAS Concept definitions |
| |
| <ul> |
| <li><a href="container_concept.htm">Container Concepts</a> |
| <ul> |
| <li><a href="container_concept.htm#vector">Vector</a> |
| </li> |
| |
| <li><a href="container_concept.htm#matrix">Matrix</a> |
| </li> |
| </ul> |
| </li> |
| |
| <li><a href="expression_concept.htm">Expression Concepts</a> |
| <ul> |
| <li><a href="expression_concept.htm#scalar_expression">Scalar Expression</a> |
| </li> |
| |
| <li><a href="expression_concept.htm#vector_expression">Vector Expression</a> |
| </li> |
| |
| <li><a href="expression_concept.htm#matrix_expression">Matrix Expression</a> |
| </li> |
| </ul> |
| </li> |
| |
| <li><a href="storage_concept.htm">Storage Concept</a> |
| </li> |
| |
| <li><a href="iterator_concept.htm">Iterator Concepts</a> |
| <ul> |
| <li><a href="iterator_concept.htm#indexed_bidirectional_iterator">Indexed Bidirectional Iterator</a> |
| </li> |
| |
| <li><a href="iterator_concept.htm#indexed_random_access_iterator">Indexed Random Access Iterator</a> |
| </li> |
| |
| <li><a href="iterator_concept.htm#indexed_bidirectional_cr_iterator">Indexed Bidirectional Column/Row Iterator</a> |
| </li> |
| |
| <li><a href="iterator_concept.htm#indexed_random_access_cr_iterator">Indexed Random Access Column/Row Iterator</a> |
| </li> |
| </ul> |
| </li> |
| </ul></li> |
| </ul> |
| |
| <h2>API Reference Documentation</h2> |
| A full Reference documenation is available on <a href="html/index.html">this page</a>. |
| |
| <h2>Supported Platforms</h2> |
| |
| <p>The current version of uBLAS expects a modern (ISO standard compliant) compiler. Compilers targeted and tested with |
| this release are:</p> |
| |
| <ul> |
| <li>GCC 3.2.3, 3.3.x, 3.4.x, 4.0.x</li> |
| |
| <li>MSVC 7.1, 8.0</li> |
| |
| <li>ICC 8.0, 8.1</li> |
| |
| <li>Visual age 6</li> |
| |
| <li>Codewarrior 9.4, 9.5</li> |
| </ul> |
| |
| <p>The version of uBLAS in Boost 1.32.0 (and earlier) support many older compilers. If you are using such a compiler |
| please use this version of uBLAS. Compilers known to accept this older library are:</p> |
| |
| <ul> |
| <li>MSVC 6.0 with STLPort-4.5.3, 7.0, 7.1</li> |
| |
| <li>GCC 2.95.x, 3.0.x, 3.1.x, 3.2.x, 3.3.x, 3.4.x</li> |
| |
| <li>ICC 7.0, 7.1 8.0</li> |
| |
| <li>Comeau 4.2.x</li> |
| |
| <li>Codewarrior 8.3</li> |
| </ul> |
| |
| <p>For possible problems please consider to consult the Boost regression tests.</p> |
| <a name="further_information" id="further_information"></a> |
| <h2>Known limitations:</h2> |
| |
| <ul type="disc"> |
| <li>The implementation assumes a linear memory address model.</li> |
| |
| <li>Tuning was focussed on dense matrices.</li> |
| </ul> |
| |
| <h2>Further Information</h2> |
| |
| <h3>Project Location and Download</h3> |
| |
| <p>The latest stable release of uBLAS is part of the <a href="http://www.boost.org">Boost</a> libraries.</p> |
| |
| <h3>Documentation and Discussion</h3> |
| |
| <p>Visit the <a href="http://www.crystalclearsoftware.com/cgi-bin/boost_wiki/wiki.pl?Effective_UBLAS">Effective |
| uBLAS</a> wiki for up to date information and contributions.</p> |
| |
| <p>There is also an active uBLAS <a href="http://lists.boost.org/">mailing list</a> where uBLAS specific user and |
| development questions are answered.</p> |
| |
| <h3>uBLAS and Boost Project</h3> |
| |
| <p>There is also an active uBLAS <a href="http://lists.boost.org/">mailing list</a> where uBLAS specific from the |
| latest uBLAS project code. You can <a href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/boost">view</a> the Boost |
| CVS archive directly. You will 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>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, David Bellot, Marco Guazzone, Nasos Iliopoulus, the members of <a href="http://www.boost.org">Boost</a> and all others contributors around the world. I promise I will try to add their names to this list.</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. You can optionally define <code>BOOST_UBLAS_NDEBUG</code> to disable all bounds, structure |
| and similar checks of uBLAS.</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-2010 Joerg Walter, Mathias Koch, Gunter Winkler, David Bellot<br /> |
| Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file |
| LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a> |
| ).</p> |
| <script type="text/javascript"> |
| (function($) { |
| $('#toc').toc(); |
| })(jQuery); |
| </script> |
| </body> |
| </html> |