Sophie

Sophie

distrib > Mageia > 4 > x86_64 > by-pkgid > 99cb5ede6a5329071fbeecc8218deb35 > files > 1053

eigen3-doc-3.2-3.mga4.noarch.rpm

<!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/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>Eigen: Quick reference guide</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
  $(window).load(resizeHeight);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css"   rel="stylesheet" type="text/css" />
<link href="eigendoxy.css" rel="stylesheet" type="text/css">
<!--  -->
<script type="text/javascript" src="eigen_navtree_hacks.js"></script>
<!-- <script type="text/javascript"> -->
<!-- </script> -->
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<!-- <a name="top"></a> -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectlogo"><img alt="Logo" src="Eigen_Silly_Professor_64x64.png"/></td>
  <td style="padding-left: 0.5em;">
   <div id="projectname"><a href="http://eigen.tuxfamily.org">Eigen</a>
   &#160;<span id="projectnumber">3.2.0</span>
   </div>
  </td>
   <td>        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
</td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('group__QuickRefPage.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Groups</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">Quick reference guide<div class="ingroups"><a class="el" href="group__DenseMatrixManipulation__chapter.html">Dense matrix and array manipulation</a></div></div>  </div>
</div><!--header-->
<div class="contents">
<hr/>
<p><a href="#" class="top">top</a> </p>
<h1><a class="anchor" id="QuickRef_Headers"></a>
Modules and Header files</h1>
<p>The <a class="el" href="namespaceEigen.html" title="Namespace containing all symbols from the Eigen library. ">Eigen</a> library is divided in a Core module and several additional modules. Each module has a corresponding header file which has to be included in order to use the module. The <code>Dense</code> and <code><a class="el" href="namespaceEigen.html" title="Namespace containing all symbols from the Eigen library. ">Eigen</a></code> header files are provided to conveniently gain access to several modules at once.</p>
<table  class="manual">
<tr>
<th>Module</th><th>Header file</th><th>Contents </th></tr>
<tr>
<td><a class="el" href="group__Core__Module.html">Core </a></td><td><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Core&gt;</span></div>
</div><!-- fragment --></td><td><a class="el" href="classEigen_1_1Matrix.html" title="The matrix class, also used for vectors and row-vectors. ">Matrix</a> and <a class="el" href="classEigen_1_1Array.html" title="General-purpose arrays with easy API for coefficient-wise operations. ">Array</a> classes, basic linear algebra (including triangular and selfadjoint products), array manipulation </td></tr>
<tr class="alt">
<td><a class="el" href="group__Geometry__Module.html">Geometry </a></td><td><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Geometry&gt;</span></div>
</div><!-- fragment --></td><td><a class="el" href="classEigen_1_1Transform.html" title="Represents an homogeneous transformation in a N dimensional space. ">Transform</a>, <a class="el" href="classEigen_1_1Translation.html" title="Represents a translation transformation. ">Translation</a>, <a class="el" href="classScaling.html" title="Represents a generic uniform scaling transformation. ">Scaling</a>, <a class="el" href="classEigen_1_1Rotation2D.html" title="Represents a rotation/orientation in a 2 dimensional space. ">Rotation2D</a> and 3D rotations (<a class="el" href="classEigen_1_1Quaternion.html" title="The quaternion class used to represent 3D orientations and rotations. ">Quaternion</a>, <a class="el" href="classEigen_1_1AngleAxis.html" title="Represents a 3D rotation as a rotation angle around an arbitrary 3D axis. ">AngleAxis</a>) </td></tr>
<tr>
<td><a class="el" href="group__LU__Module.html">LU </a></td><td><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/LU&gt;</span></div>
</div><!-- fragment --></td><td>Inverse, determinant, LU decompositions with solver (<a class="el" href="classEigen_1_1FullPivLU.html" title="LU decomposition of a matrix with complete pivoting, and related features. ">FullPivLU</a>, <a class="el" href="classEigen_1_1PartialPivLU.html" title="LU decomposition of a matrix with partial pivoting, and related features. ">PartialPivLU</a>) </td></tr>
<tr>
<td><a class="el" href="group__Cholesky__Module.html">Cholesky </a></td><td><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Cholesky&gt;</span></div>
</div><!-- fragment --></td><td><a class="el" href="classEigen_1_1LLT.html" title="Standard Cholesky decomposition (LL^T) of a matrix and associated features. ">LLT</a> and <a class="el" href="classEigen_1_1LDLT.html" title="Robust Cholesky decomposition of a matrix with pivoting. ">LDLT</a> Cholesky factorization with solver </td></tr>
<tr class="alt">
<td><a class="el" href="group__Householder__Module.html">Householder </a></td><td><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Householder&gt;</span></div>
</div><!-- fragment --></td><td>Householder transformations; this module is used by several linear algebra modules </td></tr>
<tr>
<td><a class="el" href="group__SVD__Module.html">SVD </a></td><td><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/SVD&gt;</span></div>
</div><!-- fragment --></td><td>SVD decomposition with least-squares solver (<a class="el" href="classEigen_1_1JacobiSVD.html" title="Two-sided Jacobi SVD decomposition of a rectangular matrix. ">JacobiSVD</a>) </td></tr>
<tr class="alt">
<td><a class="el" href="group__QR__Module.html">QR </a></td><td><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/QR&gt;</span></div>
</div><!-- fragment --></td><td>QR decomposition with solver (<a class="el" href="classEigen_1_1HouseholderQR.html" title="Householder QR decomposition of a matrix. ">HouseholderQR</a>, <a class="el" href="classEigen_1_1ColPivHouseholderQR.html" title="Householder rank-revealing QR decomposition of a matrix with column-pivoting. ">ColPivHouseholderQR</a>, <a class="el" href="classEigen_1_1FullPivHouseholderQR.html" title="Householder rank-revealing QR decomposition of a matrix with full pivoting. ">FullPivHouseholderQR</a>) </td></tr>
<tr>
<td><a class="el" href="group__Eigenvalues__Module.html">Eigenvalues </a></td><td><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Eigenvalues&gt;</span></div>
</div><!-- fragment --></td><td>Eigenvalue, eigenvector decompositions (<a class="el" href="classEigen_1_1EigenSolver.html" title="Computes eigenvalues and eigenvectors of general matrices. ">EigenSolver</a>, <a class="el" href="classEigen_1_1SelfAdjointEigenSolver.html" title="Computes eigenvalues and eigenvectors of selfadjoint matrices. ">SelfAdjointEigenSolver</a>, <a class="el" href="classEigen_1_1ComplexEigenSolver.html" title="Computes eigenvalues and eigenvectors of general complex matrices. ">ComplexEigenSolver</a>) </td></tr>
<tr class="alt">
<td><a class="el" href="">Sparse </a></td><td><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Sparse&gt;</span></div>
</div><!-- fragment --></td><td>Sparse matrix storage and related basic linear algebra (<a class="el" href="classEigen_1_1SparseMatrix.html" title="A versatible sparse matrix representation. ">SparseMatrix</a>, DynamicSparseMatrix, <a class="el" href="classEigen_1_1SparseVector.html" title="a sparse vector class ">SparseVector</a>) </td></tr>
<tr>
<td></td><td><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Dense&gt;</span></div>
</div><!-- fragment --></td><td>Includes Core, Geometry, LU, Cholesky, SVD, QR, and Eigenvalues header files </td></tr>
<tr class="alt">
<td></td><td><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Eigen&gt;</span></div>
</div><!-- fragment --></td><td>Includes Dense and Sparse header files (the whole <a class="el" href="namespaceEigen.html" title="Namespace containing all symbols from the Eigen library. ">Eigen</a> library) </td></tr>
</table>
<p><a href="#" class="top">top</a> </p>
<h1><a class="anchor" id="QuickRef_Types"></a>
Array, matrix and vector types</h1>
<p><b>Recall:</b> <a class="el" href="namespaceEigen.html" title="Namespace containing all symbols from the Eigen library. ">Eigen</a> provides two kinds of dense objects: mathematical matrices and vectors which are both represented by the template class <a class="el" href="classEigen_1_1Matrix.html" title="The matrix class, also used for vectors and row-vectors. ">Matrix</a>, and general 1D and 2D arrays represented by the template class <a class="el" href="classEigen_1_1Array.html" title="General-purpose arrays with easy API for coefficient-wise operations. ">Array</a>: </p>
<div class="fragment"><div class="line"><span class="keyword">typedef</span> Matrix&lt;Scalar, RowsAtCompileTime, ColsAtCompileTime, Options&gt; MyMatrixType;</div>
<div class="line"><span class="keyword">typedef</span> Array&lt;Scalar, RowsAtCompileTime, ColsAtCompileTime, Options&gt; MyArrayType;</div>
</div><!-- fragment --><ul>
<li><code>Scalar</code> is the scalar type of the coefficients (e.g., <code>float</code>, <code>double</code>, <code>bool</code>, <code>int</code>, etc.). </li>
<li><code>RowsAtCompileTime</code> and <code>ColsAtCompileTime</code> are the number of rows and columns of the matrix as known at compile-time or <code>Dynamic</code>. </li>
<li><code>Options</code> can be <code>ColMajor</code> or <code>RowMajor</code>, default is <code>ColMajor</code>. (see class <a class="el" href="classEigen_1_1Matrix.html" title="The matrix class, also used for vectors and row-vectors. ">Matrix</a> for more options)</li>
</ul>
<p>All combinations are allowed: you can have a matrix with a fixed number of rows and a dynamic number of columns, etc. The following are all valid: </p>
<div class="fragment"><div class="line">Matrix&lt;double, 6, Dynamic&gt;                  <span class="comment">// Dynamic number of columns (heap allocation)</span></div>
<div class="line">Matrix&lt;double, Dynamic, 2&gt;                  <span class="comment">// Dynamic number of rows (heap allocation)</span></div>
<div class="line">Matrix&lt;double, Dynamic, Dynamic, RowMajor&gt;  <span class="comment">// Fully dynamic, row major (heap allocation)</span></div>
<div class="line">Matrix&lt;double, 13, 3&gt;                       <span class="comment">// Fully fixed (usually allocated on stack)</span></div>
</div><!-- fragment --><p>In most cases, you can simply use one of the convenience typedefs for <a class="el" href="group__matrixtypedefs.html">matrices</a> and <a class="el" href="group__arraytypedefs.html">arrays</a>. Some examples: </p>
<table  class="example">
<tr>
<th>Matrices</th><th>Arrays </th></tr>
<tr>
<td><div class="fragment"><div class="line">Matrix&lt;float,Dynamic,Dynamic&gt;   &lt;=&gt;   <a class="code" href="group__matrixtypedefs.html#gabab09c32e96cfa9829a88400627af162">MatrixXf</a></div>
<div class="line">Matrix&lt;double,Dynamic,1&gt;        &lt;=&gt;   <a class="code" href="group__matrixtypedefs.html#ga3da45e59796fbacf67fa568297927bd1">VectorXd</a></div>
<div class="line">Matrix&lt;int,1,Dynamic&gt;           &lt;=&gt;   <a class="code" href="group__matrixtypedefs.html#ga2a50ca3334794218c2b5096fa25ca229">RowVectorXi</a></div>
<div class="line">Matrix&lt;float,3,3&gt;               &lt;=&gt;   <a class="code" href="group__matrixtypedefs.html#ga2b787393a7fc870d99aa634f60b2510c">Matrix3f</a></div>
<div class="line">Matrix&lt;float,4,1&gt;               &lt;=&gt;   <a class="code" href="group__matrixtypedefs.html#ga96452a1b0400ea4ef7935e06914a56b1">Vector4f</a></div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">Array&lt;float,Dynamic,Dynamic&gt;    &lt;=&gt;   ArrayXXf</div>
<div class="line">Array&lt;double,Dynamic,1&gt;         &lt;=&gt;   ArrayXd</div>
<div class="line">Array&lt;int,1,Dynamic&gt;            &lt;=&gt;   RowArrayXi</div>
<div class="line">Array&lt;float,3,3&gt;                &lt;=&gt;   Array33f</div>
<div class="line">Array&lt;float,4,1&gt;                &lt;=&gt;   Array4f</div>
</div><!-- fragment --> </td></tr>
</table>
<p>Conversion between the matrix and array worlds: </p>
<div class="fragment"><div class="line">Array44f a1, a1;</div>
<div class="line"><a class="code" href="group__matrixtypedefs.html#ga548963d9c2934037af5f8e5b3df87e45">Matrix4f</a> m1, m2;</div>
<div class="line">m1 = a1 * a2;                     <span class="comment">// coeffwise product, implicit conversion from array to matrix.</span></div>
<div class="line">a1 = m1 * m2;                     <span class="comment">// matrix product, implicit conversion from matrix to array.</span></div>
<div class="line">a2 = a1 + m1.<a class="code" href="classEigen_1_1MatrixBase.html#a4545be7a9af33ba337a4ebb0101395fd">array</a>();             <span class="comment">// mixing array and matrix is forbidden</span></div>
<div class="line">m2 = a1.matrix() + m1;            <span class="comment">// and explicit conversion is required.</span></div>
<div class="line">ArrayWrapper&lt;Matrix4f&gt; m1a(m1);   <span class="comment">// m1a is an alias for m1.array(), they share the same coefficients</span></div>
<div class="line">MatrixWrapper&lt;Array44f&gt; a1m(a1);</div>
</div><!-- fragment --><p>In the rest of this document we will use the following symbols to emphasize the features which are specifics to a given kind of object: </p>
<ul>
<li><a class="anchor" id="matrixonly"></a><a href="#matrixonly" style="color:green;text-decoration: none;">*</a> linear algebra matrix and vector only </li>
<li><a class="anchor" id="arrayonly"></a><a href="#arrayonly" style="color:blue;text-decoration: none;">*</a> array objects only</li>
</ul>
<h2><a class="anchor" id="QuickRef_Basics"></a>
Basic matrix manipulation</h2>
<table  class="manual">
<tr>
<th></th><th>1D objects</th><th>2D objects</th><th>Notes </th></tr>
<tr>
<td>Constructors </td><td><div class="fragment"><div class="line"><a class="code" href="group__matrixtypedefs.html#ga9bdb6b1010218b700f4bc0d23c7d2ee8">Vector4d</a>  v4;</div>
<div class="line"><a class="code" href="group__matrixtypedefs.html#ga7f1b1fd6061c265796ef9f5742854bee">Vector2f</a>  v1(x, y);</div>
<div class="line">Array3i   v2(x, y, z);</div>
<div class="line"><a class="code" href="group__matrixtypedefs.html#ga9bdb6b1010218b700f4bc0d23c7d2ee8">Vector4d</a>  v3(x, y, z, w);</div>
<div class="line"></div>
<div class="line">VectorXf  v5; <span class="comment">// empty object</span></div>
<div class="line">ArrayXf   v6(size);</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line"><a class="code" href="group__matrixtypedefs.html#ga548963d9c2934037af5f8e5b3df87e45">Matrix4f</a>  m1;</div>
<div class="line"></div>
<div class="line"></div>
<div class="line"></div>
<div class="line"></div>
<div class="line"><a class="code" href="group__matrixtypedefs.html#gabab09c32e96cfa9829a88400627af162">MatrixXf</a>  m5; <span class="comment">// empty object</span></div>
<div class="line"><a class="code" href="group__matrixtypedefs.html#gabab09c32e96cfa9829a88400627af162">MatrixXf</a>  m6(nb_rows, nb_columns);</div>
</div><!-- fragment --></td><td class="note">By default, the coefficients <br/>
 are left uninitialized </td></tr>
<tr class="alt">
<td>Comma initializer </td><td><div class="fragment"><div class="line"><a class="code" href="group__matrixtypedefs.html#ga5ac9fb0df0c4858477890cce1f998096">Vector3f</a>  v1;     v1 &lt;&lt; x, y, z;</div>
<div class="line">ArrayXf   v2(4);  v2 &lt;&lt; 1, 2, 3, 4;</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line"><a class="code" href="group__matrixtypedefs.html#ga2b787393a7fc870d99aa634f60b2510c">Matrix3f</a>  m1;   m1 &lt;&lt; 1, 2, 3,</div>
<div class="line">                      4, 5, 6,</div>
<div class="line">                      7, 8, 9;</div>
</div><!-- fragment --></td><td><p class="starttd"></p>
<p class="endtd"></p>
</td></tr>
<tr>
<td>Comma initializer (bis) </td><td colspan="2"><div class="fragment"><div class="line"><span class="keywordtype">int</span> rows=5, cols=5;</div>
<div class="line"><a class="code" href="group__matrixtypedefs.html#gabab09c32e96cfa9829a88400627af162">MatrixXf</a> m(rows,cols);</div>
<div class="line">m &lt;&lt; (<a class="code" href="group__matrixtypedefs.html#ga2b787393a7fc870d99aa634f60b2510c">Matrix3f</a>() &lt;&lt; 1, 2, 3, 4, 5, 6, 7, 8, 9).finished(),</div>
<div class="line">     <a class="code" href="classEigen_1_1DenseBase.html#a2e36721b4833498b713e94a7948c6a29">MatrixXf::Zero</a>(3,cols-3),</div>
<div class="line">     <a class="code" href="classEigen_1_1DenseBase.html#a2e36721b4833498b713e94a7948c6a29">MatrixXf::Zero</a>(rows-3,3),</div>
<div class="line">     <a class="code" href="classEigen_1_1MatrixBase.html#a0650b65c6ae6c3d19a138b72a6d68568">MatrixXf::Identity</a>(rows-3,cols-3);</div>
<div class="line">cout &lt;&lt; m;</div>
</div><!-- fragment -->  </td><td><p class="starttd">output: </p>
<pre class="fragment">1 2 3 0 0
4 5 6 0 0
7 8 9 0 0
0 0 0 1 0
0 0 0 0 1</pre>  <p class="endtd"></p>
</td></tr>
<tr class="alt">
<td>Runtime info </td><td><div class="fragment"><div class="line">vector.size();</div>
<div class="line"></div>
<div class="line">vector.innerStride();</div>
<div class="line">vector.data();</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">matrix.rows();          matrix.cols();</div>
<div class="line">matrix.innerSize();     matrix.outerSize();</div>
<div class="line">matrix.innerStride();   matrix.outerStride();</div>
<div class="line">matrix.data();</div>
</div><!-- fragment --></td><td class="note">Inner/Outer* are storage order dependent </td></tr>
<tr>
<td>Compile-time info </td><td colspan="2"><div class="fragment"><div class="line">ObjectType::Scalar              ObjectType::RowsAtCompileTime</div>
<div class="line">ObjectType::RealScalar          ObjectType::ColsAtCompileTime</div>
<div class="line">ObjectType::Index               ObjectType::SizeAtCompileTime</div>
</div><!-- fragment --></td><td></td></tr>
<tr class="alt">
<td>Resizing </td><td><div class="fragment"><div class="line">vector.resize(size);</div>
<div class="line"></div>
<div class="line"></div>
<div class="line">vector.resizeLike(other_vector);</div>
<div class="line">vector.conservativeResize(size);</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">matrix.resize(nb_rows, nb_cols);</div>
<div class="line">matrix.resize(Eigen::NoChange, nb_cols);</div>
<div class="line">matrix.resize(nb_rows, Eigen::NoChange);</div>
<div class="line">matrix.resizeLike(other_matrix);</div>
<div class="line">matrix.conservativeResize(nb_rows, nb_cols);</div>
</div><!-- fragment --></td><td class="note"><p class="starttd">no-op if the new sizes match,<br/>
otherwise data are lost<br/>
<br/>
resizing with data preservation</p>
<p class="endtd"></p>
</td></tr>
<tr>
<td>Coeff access with <br/>
 range checking </td><td><div class="fragment"><div class="line">vector(i)     vector.x()</div>
<div class="line">vector[i]     vector.y()</div>
<div class="line">              vector.z()</div>
<div class="line">              vector.w()</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">matrix(i,j)</div>
</div><!-- fragment --></td><td class="note"><p class="starttd">Range checking is disabled if <br/>
 NDEBUG or EIGEN_NO_DEBUG is defined</p>
<p class="endtd"></p>
</td></tr>
<tr class="alt">
<td>Coeff access without <br/>
 range checking </td><td><div class="fragment"><div class="line">vector.coeff(i)</div>
<div class="line">vector.coeffRef(i)</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">matrix.coeff(i,j)</div>
<div class="line">matrix.coeffRef(i,j)</div>
</div><!-- fragment --></td><td><p class="starttd"></p>
<p class="endtd"></p>
</td></tr>
<tr>
<td>Assignment/copy </td><td colspan="2"><div class="fragment"><div class="line"><span class="keywordtype">object</span> = expression;</div>
<div class="line">object_of_float = expression_of_double.cast&lt;<span class="keywordtype">float</span>&gt;();</div>
</div><!-- fragment --></td><td class="note"><p class="starttd">the destination is automatically resized (if possible)</p>
<p class="endtd"></p>
</td></tr>
</table>
<h2><a class="anchor" id="QuickRef_PredefMat"></a>
Predefined Matrices</h2>
<table  class="manual">
<tr>
<th>Fixed-size matrix or vector </th><th>Dynamic-size matrix </th><th>Dynamic-size vector  </th></tr>
<tr style="border-bottom-style: none;">
<td><div class="fragment"><div class="line"><span class="keyword">typedef</span> {<a class="code" href="group__matrixtypedefs.html#ga2b787393a7fc870d99aa634f60b2510c">Matrix3f</a>|Array33f} FixedXD;</div>
<div class="line">FixedXD x;</div>
<div class="line"></div>
<div class="line">x = FixedXD::Zero();</div>
<div class="line">x = FixedXD::Ones();</div>
<div class="line">x = FixedXD::Constant(value);</div>
<div class="line">x = FixedXD::Random();</div>
<div class="line">x = FixedXD::LinSpaced(size, low, high);</div>
<div class="line"></div>
<div class="line">x.setZero();</div>
<div class="line">x.setOnes();</div>
<div class="line">x.setConstant(value);</div>
<div class="line">x.setRandom();</div>
<div class="line">x.setLinSpaced(size, low, high);</div>
</div><!-- fragment -->  </td><td><div class="fragment"><div class="line"><span class="keyword">typedef</span> {<a class="code" href="group__matrixtypedefs.html#gabab09c32e96cfa9829a88400627af162">MatrixXf</a>|ArrayXXf} Dynamic2D;</div>
<div class="line">Dynamic2D x;</div>
<div class="line"></div>
<div class="line">x = Dynamic2D::Zero(rows, cols);</div>
<div class="line">x = Dynamic2D::Ones(rows, cols);</div>
<div class="line">x = Dynamic2D::Constant(rows, cols, value);</div>
<div class="line">x = Dynamic2D::Random(rows, cols);</div>
<div class="line">N/A</div>
<div class="line"></div>
<div class="line">x.<a class="code" href="classEigen_1_1PlainObjectBase.html#a04abe84a9a894de335a232681d9a0722">setZero</a>(rows, cols);</div>
<div class="line">x.setOnes(rows, cols);</div>
<div class="line">x.setConstant(rows, cols, value);</div>
<div class="line">x.setRandom(rows, cols);</div>
<div class="line">N/A</div>
</div><!-- fragment -->  </td><td><div class="fragment"><div class="line"><span class="keyword">typedef</span> {VectorXf|ArrayXf} Dynamic1D;</div>
<div class="line">Dynamic1D x;</div>
<div class="line"></div>
<div class="line">x = Dynamic1D::Zero(size);</div>
<div class="line">x = Dynamic1D::Ones(size);</div>
<div class="line">x = Dynamic1D::Constant(size, value);</div>
<div class="line">x = Dynamic1D::Random(size);</div>
<div class="line">x = Dynamic1D::LinSpaced(size, low, high);</div>
<div class="line"></div>
<div class="line">x.setZero(size);</div>
<div class="line">x.setOnes(size);</div>
<div class="line">x.setConstant(size, value);</div>
<div class="line">x.setRandom(size);</div>
<div class="line">x.setLinSpaced(size, low, high);</div>
</div><!-- fragment -->  <p class="endtd"></p>
</td></tr>
<tr>
<td colspan="3">Identity and <a class="el" href="classEigen_1_1MatrixBase.html#ae908d6321d43a20ed57d9f6c1c6acbe9">basis vectors </a> <a href="#matrixonly" style="color:green;text-decoration: none;">*</a> </td></tr>
<tr style="border-bottom-style: none;">
<td><div class="fragment"><div class="line">x = FixedXD::Identity();</div>
<div class="line">x.setIdentity();</div>
<div class="line"></div>
<div class="line"><a class="code" href="classEigen_1_1MatrixBase.html#a5e0e42c39330e4274d2d0479048ebc37">Vector3f::UnitX</a>() <span class="comment">// 1 0 0</span></div>
<div class="line"><a class="code" href="group__matrixtypedefs.html#ga5ac9fb0df0c4858477890cce1f998096">Vector3f</a>::UnitY() <span class="comment">// 0 1 0</span></div>
<div class="line"><a class="code" href="group__matrixtypedefs.html#ga5ac9fb0df0c4858477890cce1f998096">Vector3f</a>::UnitZ() <span class="comment">// 0 0 1</span></div>
</div><!-- fragment -->  </td><td><div class="fragment"><div class="line">x = Dynamic2D::Identity(rows, cols);</div>
<div class="line">x.setIdentity(rows, cols);</div>
<div class="line"></div>
<div class="line"></div>
<div class="line"></div>
<div class="line">N/A</div>
</div><!-- fragment -->  </td><td><div class="fragment"><div class="line">N/A</div>
<div class="line"></div>
<div class="line"></div>
<div class="line"><a class="code" href="classEigen_1_1MatrixBase.html#ae908d6321d43a20ed57d9f6c1c6acbe9">VectorXf::Unit</a>(size,i)</div>
<div class="line">VectorXf::Unit(4,1) == <a class="code" href="group__matrixtypedefs.html#ga96452a1b0400ea4ef7935e06914a56b1">Vector4f</a>(0,1,0,0)</div>
<div class="line">                    == Vector4f::UnitY()</div>
</div><!-- fragment -->   </td></tr>
</table>
<h2><a class="anchor" id="QuickRef_Map"></a>
Mapping external arrays</h2>
<table  class="manual">
<tr>
<td>Contiguous <br/>
 memory </td><td><div class="fragment"><div class="line"><span class="keywordtype">float</span> data[] = {1,2,3,4};</div>
<div class="line">Map&lt;Vector3f&gt; v1(data);       <span class="comment">// uses v1 as a Vector3f object</span></div>
<div class="line">Map&lt;ArrayXf&gt;  v2(data,3);     <span class="comment">// uses v2 as a ArrayXf object</span></div>
<div class="line">Map&lt;Array22f&gt; m1(data);       <span class="comment">// uses m1 as a Array22f object</span></div>
<div class="line">Map&lt;MatrixXf&gt; m2(data,2,2);   <span class="comment">// uses m2 as a MatrixXf object</span></div>
</div><!-- fragment -->  </td></tr>
<tr>
<td>Typical usage <br/>
 of strides </td><td><div class="fragment"><div class="line"><span class="keywordtype">float</span> data[] = {1,2,3,4,5,6,7,8,9};</div>
<div class="line">Map&lt;VectorXf,0,InnerStride&lt;2&gt; &gt;  v1(data,3);                      <span class="comment">// = [1,3,5]</span></div>
<div class="line">Map&lt;VectorXf,0,InnerStride&lt;&gt; &gt;   v2(data,3,InnerStride&lt;&gt;(3));     <span class="comment">// = [1,4,7]</span></div>
<div class="line">Map&lt;MatrixXf,0,OuterStride&lt;3&gt; &gt;  m2(data,2,3);                    <span class="comment">// both lines     |1,4,7|</span></div>
<div class="line">Map&lt;MatrixXf,0,OuterStride&lt;&gt; &gt;   m1(data,2,3,OuterStride&lt;&gt;(3));   <span class="comment">// are equal to:  |2,5,8|</span></div>
</div><!-- fragment -->  </td></tr>
</table>
<p><a href="#" class="top">top</a> </p>
<h1><a class="anchor" id="QuickRef_ArithmeticOperators"></a>
Arithmetic Operators</h1>
<table  class="manual">
<tr>
<td>add <br/>
 subtract</td><td><div class="fragment"><div class="line">mat3 = mat1 + mat2;           mat3 += mat1;</div>
<div class="line">mat3 = mat1 - mat2;           mat3 -= mat1;</div>
</div><!-- fragment -->  </td></tr>
<tr class="alt">
<td>scalar product</td><td><div class="fragment"><div class="line">mat3 = mat1 * s1;             mat3 *= s1;           mat3 = s1 * mat1;</div>
<div class="line">mat3 = mat1 / s1;             mat3 /= s1;</div>
</div><!-- fragment -->  </td></tr>
<tr>
<td>matrix/vector <br/>
 products <a href="#matrixonly" style="color:green;text-decoration: none;">*</a></td><td><div class="fragment"><div class="line">col2 = mat1 * col1;</div>
<div class="line">row2 = row1 * mat1;           row1 *= mat1;</div>
<div class="line">mat3 = mat1 * mat2;           mat3 *= mat1; </div>
</div><!-- fragment -->  </td></tr>
<tr class="alt">
<td>transposition <br/>
 adjoint <a href="#matrixonly" style="color:green;text-decoration: none;">*</a></td><td><div class="fragment"><div class="line">mat1 = mat2.transpose();      mat1.transposeInPlace();</div>
<div class="line">mat1 = mat2.adjoint();        mat1.adjointInPlace();</div>
</div><!-- fragment -->  </td></tr>
<tr>
<td><a class="el" href="classEigen_1_1MatrixBase.html#adb71ddef4955ae7d353df12d05665191">dot </a> product <br/>
 inner product <a href="#matrixonly" style="color:green;text-decoration: none;">*</a></td><td><div class="fragment"><div class="line">scalar = vec1.dot(vec2);</div>
<div class="line">scalar = col1.adjoint() * col2;</div>
<div class="line">scalar = (col1.adjoint() * col2).value();</div>
</div><!-- fragment -->  </td></tr>
<tr class="alt">
<td>outer product <a href="#matrixonly" style="color:green;text-decoration: none;">*</a></td><td><div class="fragment"><div class="line">mat = col1 * col2.transpose();</div>
</div><!-- fragment --> <p class="endtd"></p>
</td></tr>
<tr>
<td><a class="el" href="classEigen_1_1MatrixBase.html#a0be1b433c65ce9d92c81a4718daf54e5">norm </a> <br/>
 <a class="el" href="classEigen_1_1MatrixBase.html#a8ed1fb2e792b1079639a74e3581fbc74">normalization </a> <a href="#matrixonly" style="color:green;text-decoration: none;">*</a></td><td><div class="fragment"><div class="line">scalar = vec1.norm();         scalar = vec1.squaredNorm()</div>
<div class="line">vec2 = vec1.normalized();     vec1.normalize(); <span class="comment">// inplace </span></div>
</div><!-- fragment --> <p class="endtd"></p>
</td></tr>
<tr class="alt">
<td><a class="el" href="">cross product </a> <a href="#matrixonly" style="color:green;text-decoration: none;">*</a></td><td><div class="fragment"><div class="line"><span class="preprocessor">#include &lt;Eigen/Geometry&gt;</span></div>
<div class="line">vec3 = vec1.cross(vec2);</div>
</div><!-- fragment --> </td></tr>
</table>
<p><a href="#" class="top">top</a> </p>
<h1><a class="anchor" id="QuickRef_Coeffwise"></a>
Coefficient-wise &amp; Array operators</h1>
<p>Coefficient-wise operators for matrices and vectors: </p>
<table  class="manual">
<tr>
<th><a class="el" href="classEigen_1_1Matrix.html" title="The matrix class, also used for vectors and row-vectors. ">Matrix</a> API <a href="#matrixonly" style="color:green;text-decoration: none;">*</a></th><th>Via <a class="el" href="classEigen_1_1Array.html" title="General-purpose arrays with easy API for coefficient-wise operations. ">Array</a> conversions </th></tr>
<tr>
<td><div class="fragment"><div class="line">mat1.cwiseMin(mat2)</div>
<div class="line">mat1.cwiseMax(mat2)</div>
<div class="line">mat1.cwiseAbs2()</div>
<div class="line">mat1.cwiseAbs()</div>
<div class="line">mat1.cwiseSqrt()</div>
<div class="line">mat1.cwiseProduct(mat2)</div>
<div class="line">mat1.cwiseQuotient(mat2)</div>
</div><!-- fragment --> </td><td><div class="fragment"><div class="line">mat1.array().min(mat2.array())</div>
<div class="line">mat1.array().max(mat2.array())</div>
<div class="line">mat1.array().abs2()</div>
<div class="line">mat1.array().abs()</div>
<div class="line">mat1.array().sqrt()</div>
<div class="line">mat1.array() * mat2.array()</div>
<div class="line">mat1.array() / mat2.array()</div>
</div><!-- fragment --> </td></tr>
</table>
<p>It is also very simple to apply any user defined function <code>foo</code> using DenseBase::unaryExpr together with std::ptr_fun: </p>
<div class="fragment"><div class="line">mat1.unaryExpr(std::ptr_fun(foo))</div>
</div><!-- fragment --><p><a class="el" href="classEigen_1_1Array.html" title="General-purpose arrays with easy API for coefficient-wise operations. ">Array</a> operators:<a href="#arrayonly" style="color:blue;text-decoration: none;">*</a></p>
<table  class="manual">
<tr>
<td>Arithmetic operators</td><td><div class="fragment"><div class="line">array1 * array2     array1 / array2     array1 *= array2    array1 /= array2</div>
<div class="line">array1 + scalar     array1 - scalar     array1 += scalar    array1 -= scalar</div>
</div><!-- fragment --> </td></tr>
<tr>
<td>Comparisons</td><td><div class="fragment"><div class="line">array1 &lt; array2     array1 &gt; array2     array1 &lt; scalar     array1 &gt; scalar</div>
<div class="line">array1 &lt;= array2    array1 &gt;= array2    array1 &lt;= scalar    array1 &gt;= scalar</div>
<div class="line">array1 == array2    array1 != array2    array1 == scalar    array1 != scalar</div>
</div><!-- fragment --> </td></tr>
<tr>
<td>Trigo, power, and <br/>
 misc functions <br/>
 and the STL variants</td><td><div class="fragment"><div class="line">array1.min(array2)            </div>
<div class="line">array1.max(array2)            </div>
<div class="line">array1.abs2()</div>
<div class="line">array1.abs()                  std::abs(array1)</div>
<div class="line">array1.sqrt()                 std::sqrt(array1)</div>
<div class="line">array1.log()                  std::log(array1)</div>
<div class="line">array1.exp()                  std::exp(array1)</div>
<div class="line">array1.pow(exponent)          std::pow(array1,exponent)</div>
<div class="line">array1.square()</div>
<div class="line">array1.cube()</div>
<div class="line">array1.inverse()</div>
<div class="line">array1.sin()                  std::sin(array1)</div>
<div class="line">array1.cos()                  std::cos(array1)</div>
<div class="line">array1.tan()                  std::tan(array1)</div>
<div class="line">array1.asin()                 std::asin(array1)</div>
<div class="line">array1.acos()                 std::acos(array1)</div>
</div><!-- fragment -->  </td></tr>
</table>
<p><a href="#" class="top">top</a> </p>
<h1><a class="anchor" id="QuickRef_Reductions"></a>
Reductions</h1>
<p><a class="el" href="namespaceEigen.html" title="Namespace containing all symbols from the Eigen library. ">Eigen</a> provides several reduction methods such as: <a class="el" href="classEigen_1_1DenseBase.html#add6cb2d85282829eb9adc9565ce784d6">minCoeff() </a>, <a class="el" href="classEigen_1_1DenseBase.html#a878f0dae18b28d8158c5f1c232edced2">maxCoeff() </a>, <a class="el" href="classEigen_1_1DenseBase.html#a3a3b3fb530d3364ecef0bf9c9daf0983">sum() </a>, <a class="el" href="classEigen_1_1DenseBase.html#a6bdcbfa7e3b07d3246ad80de7170b0f5">prod() </a>, <a class="el" href="classEigen_1_1MatrixBase.html#a71696dd0adbf4731561fd60e55c3a96e">trace() </a> <a href="#matrixonly" style="color:green;text-decoration: none;">*</a>, <a class="el" href="classEigen_1_1MatrixBase.html#a0be1b433c65ce9d92c81a4718daf54e5">norm() </a> <a href="#matrixonly" style="color:green;text-decoration: none;">*</a>, <a class="el" href="classEigen_1_1MatrixBase.html#a229bd5cc6237359a1d85401743476ede">squaredNorm() </a> <a href="#matrixonly" style="color:green;text-decoration: none;">*</a>, <a class="el" href="classEigen_1_1DenseBase.html#aea914316af61df197f21629e14e7870a">all() </a>, and <a class="el" href="classEigen_1_1DenseBase.html#a42571e028736ca9103bac8b50f269824">any() </a>. All reduction operations can be done matrix-wise, <a class="el" href="classEigen_1_1DenseBase.html#abe7ae69362c464b6721adbb47c655874">column-wise </a> or <a class="el" href="classEigen_1_1DenseBase.html#a8a7fd1e8004d4bd93a7ea36957aa8e99">row-wise </a>. Usage example: </p>
<table  class="manual">
<tr>
<td rowspan="3" style="border-right-style:dashed;vertical-align:middle"><div class="fragment"><div class="line">      5 3 1</div>
<div class="line">mat = 2 7 8</div>
<div class="line">      9 4 6 </div>
</div><!-- fragment -->  </td><td><div class="fragment"><div class="line">mat.minCoeff(); </div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">1 </div>
</div><!-- fragment --> </td></tr>
<tr class="alt">
<td><div class="fragment"><div class="line">mat.colwise().minCoeff(); </div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">2 3 1 </div>
</div><!-- fragment --> </td></tr>
<tr style="vertical-align:middle">
<td><div class="fragment"><div class="line">mat.rowwise().minCoeff(); </div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">1</div>
<div class="line">2</div>
<div class="line">4</div>
</div><!-- fragment --> </td></tr>
</table>
<p>Special versions of <a class="el" href="classEigen_1_1DenseBase.html#ad927d600371ba16dcb44518530ba906a">minCoeff </a> and <a class="el" href="classEigen_1_1DenseBase.html#aad851ef369d212dcea81d9cded12dbdd">maxCoeff </a>: </p>
<div class="fragment"><div class="line"><span class="keywordtype">int</span> i, j;</div>
<div class="line">s = vector.minCoeff(&amp;i);        <span class="comment">// s == vector[i]</span></div>
<div class="line">s = matrix.maxCoeff(&amp;i, &amp;j);    <span class="comment">// s == matrix(i,j)</span></div>
</div><!-- fragment --><p> Typical use cases of all() and any(): </p>
<div class="fragment"><div class="line"><span class="keywordflow">if</span>((array1 &gt; 0).all()) ...      <span class="comment">// if all coefficients of array1 are greater than 0 ...</span></div>
<div class="line"><span class="keywordflow">if</span>((array1 &lt; array2).any()) ... <span class="comment">// if there exist a pair i,j such that array1(i,j) &lt; array2(i,j) ...</span></div>
</div><!-- fragment --><p><a href="#" class="top">top</a></p>
<h1><a class="anchor" id="QuickRef_Blocks"></a>
Sub-matrices</h1>
<p>Read-write access to a <a class="el" href="classEigen_1_1DenseBase.html#a58c77695de3b33405f01f2fdf3dc389d">column </a> or a <a class="el" href="classEigen_1_1DenseBase.html#aa8716d44f51321072ee5c88665c28813">row </a> of a matrix (or array): </p>
<div class="fragment"><div class="line">mat1.row(i) = mat2.col(j);</div>
<div class="line">mat1.col(j1).swap(mat1.col(j2));</div>
</div><!-- fragment --><p>Read-write access to sub-vectors: </p>
<table  class="manual">
<tr>
<th>Default versions </th><th>Optimized versions when the size <br/>
 is known at compile time </th><th><p class="starttd"></p>
<p class="endtd"></p>
</th></tr>
<tr>
<td><div class="fragment"><div class="line">vec1.head(n)</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">vec1.head&lt;n&gt;()</div>
</div><!-- fragment --></td><td>the first <code>n</code> coeffs  </td></tr>
<tr>
<td><div class="fragment"><div class="line">vec1.tail(n)</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">vec1.tail&lt;n&gt;()</div>
</div><!-- fragment --></td><td>the last <code>n</code> coeffs  </td></tr>
<tr>
<td><div class="fragment"><div class="line">vec1.segment(pos,n)</div>
</div><!-- fragment --></td><td><div class="fragment"><div class="line">vec1.segment&lt;n&gt;(pos)</div>
</div><!-- fragment --> </td><td>the <code>n</code> coeffs in the <br/>
 range [<code>pos</code> : <code>pos</code> + <code>n</code> - 1] </td></tr>
<tr class="alt">
<td colspan="3"><p class="starttd"></p>
<p class="endtd">Read-write access to sub-matrices: </p>
</td></tr>
<tr>
<td><div class="fragment"><div class="line">mat1.block(i,j,rows,cols)</div>
</div><!-- fragment --> <a class="el" href="classEigen_1_1DenseBase.html#a1dbaa2fc7b809720407130f48dfacf8f">(more) </a> </td><td><div class="fragment"><div class="line">mat1.block&lt;rows,cols&gt;(i,j)</div>
</div><!-- fragment --> <a class="el" href="classEigen_1_1DenseBase.html#a3e433315822db2811a65e88c70672743">(more) </a> </td><td>the <code>rows</code> x <code>cols</code> sub-matrix <br/>
 starting from position (<code>i</code>,<code>j</code>) </td></tr>
<tr>
<td><div class="fragment"><div class="line">mat1.topLeftCorner(rows,cols)</div>
<div class="line">mat1.topRightCorner(rows,cols)</div>
<div class="line">mat1.bottomLeftCorner(rows,cols)</div>
<div class="line">mat1.bottomRightCorner(rows,cols)</div>
</div><!-- fragment --> </td><td><div class="fragment"><div class="line">mat1.topLeftCorner&lt;rows,cols&gt;()</div>
<div class="line">mat1.topRightCorner&lt;rows,cols&gt;()</div>
<div class="line">mat1.bottomLeftCorner&lt;rows,cols&gt;()</div>
<div class="line">mat1.bottomRightCorner&lt;rows,cols&gt;()</div>
</div><!-- fragment --> </td><td>the <code>rows</code> x <code>cols</code> sub-matrix <br/>
 taken in one of the four corners </td></tr>
<tr>
<td><div class="fragment"><div class="line">mat1.topRows(rows)</div>
<div class="line">mat1.bottomRows(rows)</div>
<div class="line">mat1.leftCols(cols)</div>
<div class="line">mat1.rightCols(cols)</div>
</div><!-- fragment --> </td><td><div class="fragment"><div class="line">mat1.topRows&lt;rows&gt;()</div>
<div class="line">mat1.bottomRows&lt;rows&gt;()</div>
<div class="line">mat1.leftCols&lt;cols&gt;()</div>
<div class="line">mat1.rightCols&lt;cols&gt;()</div>
</div><!-- fragment --> </td><td>specialized versions of block() <br/>
 when the block fit two corners </td></tr>
</table>
<p><a href="#" class="top">top</a></p>
<h1><a class="anchor" id="QuickRef_Misc"></a>
Miscellaneous operations</h1>
<h2><a class="anchor" id="QuickRef_Reverse"></a>
Reverse</h2>
<p>Vectors, rows, and/or columns of a matrix can be reversed (see <a class="el" href="classEigen_1_1DenseBase.html#a6e354bb81f0c7b6888c6a0ce4b4649e2">DenseBase::reverse()</a>, <a class="el" href="classEigen_1_1DenseBase.html#af148c4e77e657d04573c4fda43740ed5">DenseBase::reverseInPlace()</a>, <a class="el" href="classEigen_1_1VectorwiseOp.html#a04e38b3a68fe5ae6908594f3b1ec618c">VectorwiseOp::reverse()</a>). </p>
<div class="fragment"><div class="line">vec.reverse()           mat.colwise().reverse()   mat.rowwise().reverse()</div>
<div class="line">vec.reverseInPlace()</div>
</div><!-- fragment --><h2><a class="anchor" id="QuickRef_Replicate"></a>
Replicate</h2>
<p>Vectors, matrices, rows, and/or columns can be replicated in any direction (see <a class="el" href="classEigen_1_1DenseBase.html#afca0e8ff7921ee0e3ab4422818ecb214">DenseBase::replicate()</a>, <a class="el" href="classEigen_1_1VectorwiseOp.html#a9a078997c488c2d83fbd45108af26e1d">VectorwiseOp::replicate()</a>) </p>
<div class="fragment"><div class="line">vec.replicate(times)                                          vec.replicate&lt;Times&gt;</div>
<div class="line">mat.replicate(vertical_times, horizontal_times)               mat.replicate&lt;VerticalTimes, HorizontalTimes&gt;()</div>
<div class="line">mat.colwise().replicate(vertical_times, horizontal_times)     mat.colwise().replicate&lt;VerticalTimes, HorizontalTimes&gt;()</div>
<div class="line">mat.rowwise().replicate(vertical_times, horizontal_times)     mat.rowwise().replicate&lt;VerticalTimes, HorizontalTimes&gt;()</div>
</div><!-- fragment --><p><a href="#" class="top">top</a></p>
<h1><a class="anchor" id="QuickRef_DiagTriSymm"></a>
Diagonal, Triangular, and Self-adjoint matrices</h1>
<p>(matrix world <a href="#matrixonly" style="color:green;text-decoration: none;">*</a>)</p>
<h2><a class="anchor" id="QuickRef_Diagonal"></a>
Diagonal matrices</h2>
<table  class="example">
<tr>
<th>Operation</th><th>Code </th></tr>
<tr>
<td>view a vector <a class="el" href="classEigen_1_1MatrixBase.html#adaf22d3a2069ec2c0df912cb87329e9c">as a diagonal matrix </a> <br/>
 </td><td><div class="fragment"><div class="line">mat1 = vec1.asDiagonal();</div>
</div><!-- fragment -->  </td></tr>
<tr>
<td>Declare a diagonal matrix</td><td><div class="fragment"><div class="line">DiagonalMatrix&lt;Scalar,SizeAtCompileTime&gt; diag1(size);</div>
<div class="line">diag1.diagonal() = vector;</div>
</div><!-- fragment -->  </td></tr>
<tr>
<td>Access the <a class="el" href="classEigen_1_1MatrixBase.html#a0a45dd0ed5a44ec3f8f43239f2e4ac25">diagonal </a> and <a class="el" href="classEigen_1_1MatrixBase.html#a18f8f447d5f4bd633df62a012f84df18">super/sub diagonals </a> of a matrix as a vector (read/write) </td><td><div class="fragment"><div class="line">vec1 = mat1.diagonal();        mat1.diagonal() = vec1;      <span class="comment">// main diagonal</span></div>
<div class="line">vec1 = mat1.diagonal(+n);      mat1.diagonal(+n) = vec1;    <span class="comment">// n-th super diagonal</span></div>
<div class="line">vec1 = mat1.diagonal(-n);      mat1.diagonal(-n) = vec1;    <span class="comment">// n-th sub diagonal</span></div>
<div class="line">vec1 = mat1.diagonal&lt;1&gt;();     mat1.diagonal&lt;1&gt;() = vec1;   <span class="comment">// first super diagonal</span></div>
<div class="line">vec1 = mat1.diagonal&lt;-2&gt;();    mat1.diagonal&lt;-2&gt;() = vec1;  <span class="comment">// second sub diagonal</span></div>
</div><!-- fragment --> <p class="endtd"></p>
</td></tr>
<tr>
<td>Optimized products and inverse </td><td><div class="fragment"><div class="line">mat3  = scalar * diag1 * mat1;</div>
<div class="line">mat3 += scalar * mat1 * vec1.asDiagonal();</div>
<div class="line">mat3 = vec1.asDiagonal().inverse() * mat1</div>
<div class="line">mat3 = mat1 * diag1.inverse()</div>
</div><!-- fragment --> <p class="endtd"></p>
</td></tr>
</table>
<h2><a class="anchor" id="QuickRef_TriangularView"></a>
Triangular views</h2>
<p><a class="el" href="classEigen_1_1TriangularView.html" title="Base class for triangular part in a matrix. ">TriangularView</a> gives a view on a triangular part of a dense matrix and allows to perform optimized operations on it. The opposite triangular part is never referenced and can be used to store other information.</p>
<dl class="section note"><dt>Note</dt><dd>The .triangularView() template member function requires the <code>template</code> keyword if it is used on an object of a type that depends on a template parameter; see <a class="el" href="TopicTemplateKeyword.html">The template and typename keywords in C++</a> for details.</dd></dl>
<table  class="example">
<tr>
<th>Operation</th><th>Code </th></tr>
<tr>
<td>Reference to a triangular with optional <br/>
unit or null diagonal (read/write): </td><td><div class="fragment"><div class="line">m.triangularView&lt;Xxx&gt;()</div>
</div><!-- fragment --> <br/>
<code>Xxx</code> = <a class="el" href="group__enums.html#ggab59c1bec446b10af208f977a871d910bae70afef0d3ff7aca74e17e85ff6c9f2e">Upper</a>, <a class="el" href="group__enums.html#ggab59c1bec446b10af208f977a871d910baf886b397626076218462d53d50eb96bc">Lower</a>, <a class="el" href="group__enums.html#ggab59c1bec446b10af208f977a871d910babf11791f004a059cfdd9b941c76f3703">StrictlyUpper</a>, <a class="el" href="group__enums.html#ggab59c1bec446b10af208f977a871d910ba29eb98bd08096415c55f37ed4ac2af11">StrictlyLower</a>, <a class="el" href="group__enums.html#ggab59c1bec446b10af208f977a871d910ba65b1d67b2bb2e4a85b5f6a8863cd7109">UnitUpper</a>, <a class="el" href="group__enums.html#ggab59c1bec446b10af208f977a871d910ba0dc6c411b3fc7ae6e32860a7872b7d18">UnitLower</a>  </td></tr>
<tr>
<td>Writing to a specific triangular part:<br/>
 (only the referenced triangular part is evaluated) </td><td><div class="fragment"><div class="line">m1.triangularView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910baf886b397626076218462d53d50eb96bc">Eigen::Lower</a>&gt;() = m2 + m3 </div>
</div><!-- fragment -->  </td></tr>
<tr>
<td>Conversion to a dense matrix setting the opposite triangular part to zero: </td><td><div class="fragment"><div class="line">m2 = m1.triangularView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910ba65b1d67b2bb2e4a85b5f6a8863cd7109">Eigen::UnitUpper</a>&gt;()</div>
</div><!-- fragment -->  </td></tr>
<tr>
<td>Products: </td><td><div class="fragment"><div class="line">m3 += s1 * m1.adjoint().triangularView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910ba65b1d67b2bb2e4a85b5f6a8863cd7109">Eigen::UnitUpper</a>&gt;() * m2</div>
<div class="line">m3 -= s1 * m2.conjugate() * m1.adjoint().triangularView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910baf886b397626076218462d53d50eb96bc">Eigen::Lower</a>&gt;() </div>
</div><!-- fragment -->  </td></tr>
<tr>
<td>Solving linear equations:<br/>
 <img class="formulaInl" alt="$ M_2 := L_1^{-1} M_2 $" src="form_168.png"/> <br/>
 <img class="formulaInl" alt="$ M_3 := {L_1^*}^{-1} M_3 $" src="form_169.png"/> <br/>
 <img class="formulaInl" alt="$ M_4 := M_4 U_1^{-1} $" src="form_170.png"/> </td><td><br/>
 <div class="fragment"><div class="line">L1.triangularView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910ba0dc6c411b3fc7ae6e32860a7872b7d18">Eigen::UnitLower</a>&gt;().solveInPlace(M2)</div>
<div class="line">L1.triangularView&lt;Eigen::<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910baf886b397626076218462d53d50eb96bc">Lower</a>&gt;().adjoint().solveInPlace(M3)</div>
<div class="line">U1.triangularView&lt;Eigen::<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910bae70afef0d3ff7aca74e17e85ff6c9f2e">Upper</a>&gt;().solveInPlace&lt;<a class="code" href="group__enums.html#gga3f4a95405348aa63ef907e692901011faeda0d7b1859ec757de18ee3b7c6c541c">OnTheRight</a>&gt;(M4)</div>
</div><!-- fragment -->  </td></tr>
</table>
<h2><a class="anchor" id="QuickRef_SelfadjointMatrix"></a>
Symmetric/selfadjoint views</h2>
<p>Just as for triangular matrix, you can reference any triangular part of a square matrix to see it as a selfadjoint matrix and perform special and optimized operations. Again the opposite triangular part is never referenced and can be used to store other information.</p>
<dl class="section note"><dt>Note</dt><dd>The .selfadjointView() template member function requires the <code>template</code> keyword if it is used on an object of a type that depends on a template parameter; see <a class="el" href="TopicTemplateKeyword.html">The template and typename keywords in C++</a> for details.</dd></dl>
<table  class="example">
<tr>
<th>Operation</th><th>Code </th></tr>
<tr>
<td>Conversion to a dense matrix: </td><td><div class="fragment"><div class="line">m2 = m.selfadjointView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910baf886b397626076218462d53d50eb96bc">Eigen::Lower</a>&gt;();</div>
</div><!-- fragment -->  </td></tr>
<tr>
<td>Product with another general matrix or vector: </td><td><div class="fragment"><div class="line">m3  = s1 * m1.conjugate().selfadjointView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910bae70afef0d3ff7aca74e17e85ff6c9f2e">Eigen::Upper</a>&gt;() * m3;</div>
<div class="line">m3 -= s1 * m3.adjoint() * m1.selfadjointView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910baf886b397626076218462d53d50eb96bc">Eigen::Lower</a>&gt;();</div>
</div><!-- fragment -->  </td></tr>
<tr>
<td>Rank 1 and rank K update: <br/>
 <img class="formulaInl" alt="$ upper(M_1) \mathrel{{+}{=}} s_1 M_2 M_2^* $" src="form_171.png"/> <br/>
 <img class="formulaInl" alt="$ lower(M_1) \mathbin{{-}{=}} M_2^* M_2 $" src="form_172.png"/> </td><td><br/>
 <div class="fragment"><div class="line">M1.selfadjointView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910bae70afef0d3ff7aca74e17e85ff6c9f2e">Eigen::Upper</a>&gt;().rankUpdate(M2,s1);</div>
<div class="line">M1.selfadjointView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910baf886b397626076218462d53d50eb96bc">Eigen::Lower</a>&gt;().rankUpdate(M2.adjoint(),-1); </div>
</div><!-- fragment -->  </td></tr>
<tr>
<td>Rank 2 update: ( <img class="formulaInl" alt="$ M \mathrel{{+}{=}} s u v^* + s v u^* $" src="form_173.png"/>) </td><td><div class="fragment"><div class="line">M.selfadjointView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910bae70afef0d3ff7aca74e17e85ff6c9f2e">Eigen::Upper</a>&gt;().rankUpdate(u,v,s);</div>
</div><!-- fragment -->  </td></tr>
<tr>
<td>Solving linear equations:<br/>
( <img class="formulaInl" alt="$ M_2 := M_1^{-1} M_2 $" src="form_174.png"/>) </td><td><div class="fragment"><div class="line"><span class="comment">// via a standard Cholesky factorization</span></div>
<div class="line">m2 = m1.selfadjointView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910bae70afef0d3ff7aca74e17e85ff6c9f2e">Eigen::Upper</a>&gt;().llt().solve(m2);</div>
<div class="line"><span class="comment">// via a Cholesky factorization with pivoting</span></div>
<div class="line">m2 = m1.selfadjointView&lt;<a class="code" href="group__enums.html#ggab59c1bec446b10af208f977a871d910baf886b397626076218462d53d50eb96bc">Eigen::Lower</a>&gt;().ldlt().solve(m2);</div>
</div><!-- fragment -->  </td></tr>
</table>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="footer">Generated on Mon Oct 28 2013 11:04:27 for Eigen by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.5 </li>
  </ul>
</div>
<!-- Piwik --> 
<!--
<script type="text/javascript">
var pkBaseURL = (("https:" == document.location.protocol) ? "https://stats.sylphide-consulting.com/piwik/" : "http://stats.sylphide-consulting.com/piwik/");
document.write(unescape("%3Cscript src='" + pkBaseURL + "piwik.js' type='text/javascript'%3E%3C/script%3E"));
</script><script type="text/javascript">
try {
var piwikTracker = Piwik.getTracker(pkBaseURL + "piwik.php", 20);
piwikTracker.trackPageView();
piwikTracker.enableLinkTracking();
} catch( err ) {}
</script><noscript><p><img src="http://stats.sylphide-consulting.com/piwik/piwik.php?idsite=20" style="border:0" alt="" /></p></noscript>
-->
<!-- End Piwik Tracking Code -->
</body>
</html>