* the Upper->UpperTriangular change

* finally get ei_add_test right
This commit is contained in:
Benoit Jacob
2008-12-20 13:36:12 +00:00
parent 21ab65e4b3
commit 9e00d94543
33 changed files with 181 additions and 179 deletions

View File

@@ -513,20 +513,20 @@ Read/write access to special parts of a matrix can be achieved. See \link Matrix
<tr><td>
Extract triangular matrices \n from a given matrix m:
</td><td>\code
m.part<Eigen::Upper>()
m.part<Eigen::StrictlyUpper>()
m.part<Eigen::UnitUpper>()
m.part<Eigen::Lower>()
m.part<Eigen::StrictlyLower>()
m.part<Eigen::UnitLower>()\endcode
m.part<Eigen::UpperTriangular>()
m.part<Eigen::StrictlyUpperTriangular>()
m.part<Eigen::UnitUpperTriangular>()
m.part<Eigen::LowerTriangular>()
m.part<Eigen::StrictlyLowerTriangular>()
m.part<Eigen::UnitLowerTriangular>()\endcode
</td></tr>
<tr><td>
Write to triangular parts \n of a matrix m:
</td><td>\code
m1.part<Eigen::Upper>() = m2;
m1.part<Eigen::StrictlyUpper>() = m2;
m1.part<Eigen::Lower>() = m2;
m1.part<Eigen::StrictlyLower>() = m2;\endcode
m1.part<Eigen::UpperTriangular>() = m2;
m1.part<Eigen::StrictlyUpperTriangular>() = m2;
m1.part<Eigen::LowerTriangular>() = m2;
m1.part<Eigen::StrictlyLowerTriangular>() = m2;\endcode
</td></tr>
<tr><td>
Special: take advantage of symmetry \n (selfadjointness) when copying \n an expression into a matrix

View File

@@ -1,8 +1,8 @@
Matrix3i m = Matrix3i::Random();
cout << "Here is the matrix m:" << endl << m << endl;
cout << "Here is the upper-triangular matrix extracted from m:" << endl
<< m.part<Eigen::Upper>() << endl;
<< m.part<Eigen::UpperTriangular>() << endl;
cout << "Here is the strictly-upper-triangular matrix extracted from m:" << endl
<< m.part<Eigen::StrictlyUpper>() << endl;
<< m.part<Eigen::StrictlyUpperTriangular>() << endl;
cout << "Here is the unit-lower-triangular matrix extracted from m:" << endl
<< m.part<Eigen::UnitLower>() << endl;
<< m.part<Eigen::UnitLowerTriangular>() << endl;

View File

@@ -1,9 +1,9 @@
Matrix3d m = Matrix3d::Zero();
m.part<Eigen::Upper>().setOnes();
m.part<Eigen::UpperTriangular>().setOnes();
cout << "Here is the matrix m:" << endl << m << endl;
Matrix3d n = Matrix3d::Ones();
n.part<Eigen::Lower>() *= 2;
n.part<Eigen::LowerTriangular>() *= 2;
cout << "Here is the matrix n:" << endl << n << endl;
cout << "And now here is m.inverse()*n, taking advantage of the fact that"
" m is upper-triangular:" << endl
<< m.marked<Eigen::Upper>().solveTriangular(n);
<< m.marked<Eigen::UpperTriangular>().solveTriangular(n);

View File

@@ -1,5 +1,5 @@
Matrix3d m = Matrix3i::Zero();
m.part<Eigen::StrictlyUpper>().setOnes();
m.part<Eigen::StrictlyUpperTriangular>().setOnes();
cout << "Here is the matrix m:" << endl << m << endl;
cout << "And let us now compute m*m.adjoint() in a very optimized way" << endl
<< "taking advantage of the symmetry." << endl;

View File

@@ -7,7 +7,7 @@ cout << "Here is, up to permutations, its LU decomposition matrix:"
<< endl << lu.matrixLU() << endl;
cout << "Here is the actual L matrix in this decomposition:" << endl;
Matrix5x5 l = Matrix5x5::Identity();
l.block<5,3>(0,0).part<StrictlyLower>() = lu.matrixLU();
l.block<5,3>(0,0).part<StrictlyLowerTriangular>() = lu.matrixLU();
cout << l << endl;
cout << "Let us now reconstruct the original matrix m:" << endl;
Matrix5x3 x = l * lu.matrixU();