mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
* the Upper->UpperTriangular change
* finally get ei_add_test right
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user