template<typename _MatrixType, unsigned int _Mode>
class Eigen::TriangularViewImpl< _MatrixType, _Mode, Dense >
Base class for a triangular part in a dense matrix.
This class is an abstract base class of class TriangularView, and objects of type TriangularViewImpl cannot be instantiated. It extends class TriangularView with additional methods which available for dense expressions only.
- See also
- class TriangularView, MatrixBase::triangularView()
template<typename _MatrixType , unsigned int _Mode>
template<int Side, typename Other >
const internal::triangular_solve_retval<Side,TriangularViewType, Other> Eigen::TriangularViewImpl< _MatrixType, _Mode, Dense >::solve |
( |
const MatrixBase< Other > & |
other | ) |
const |
|
inline |
- Returns
- the product of the inverse of
*this
with other, *this being triangular.
This function computes the inverse-matrix matrix product inverse(*this
) * other if Side==OnTheLeft (the default), or the right-inverse-multiply other * inverse(*this
) if Side==OnTheRight.
Note that the template parameter Side
can be omitted, in which case Side==OnTheLeft
The matrix *this
must be triangular and invertible (i.e., all the coefficients of the diagonal must be non zero). It works as a forward (resp. backward) substitution if *this
is an upper (resp. lower) triangular matrix.
Example:
cout << "Here is the matrix m:\n" << m << endl;
cout << "Here is the matrix n:\n" << n << endl;
cout << "And now here is m.inverse()*n, taking advantage of the fact that"
" m is upper-triangular:\n"
cout << "And this is n*m.inverse():\n"
<< m.triangularView<
Eigen::Upper>().solve<Eigen::OnTheRight>(n);
static const ConstantReturnType Ones()
Definition: CwiseNullaryOp.h:670
static const ConstantReturnType Zero()
Definition: CwiseNullaryOp.h:514
TriangularViewType & setOnes()
Definition: TriangularMatrix.h:412
const internal::triangular_solve_retval< Side, TriangularViewType, Other > solve(const MatrixBase< Other > &other) const
@ Lower
Definition: Constants.h:209
@ Upper
Definition: Constants.h:211
Output:
Here is the matrix m:
1 1 1
0 1 1
0 0 1
Here is the matrix n:
2 1 1
2 2 1
2 2 2
And now here is m.inverse()*n, taking advantage of the fact that m is upper-triangular:
0 -1 0
0 0 -1
2 2 2
And this is n*m.inverse():
2 -1 0
2 0 -1
2 0 0
This function returns an expression of the inverse-multiply and can works in-place if it is assigned to the same matrix or vector other.
For users coming from BLAS, this function (and more specifically solveInPlace()) offer all the operations supported by the *TRSV
and *TRSM
BLAS routines.
- See also
- TriangularView::solveInPlace()
template<typename _MatrixType , unsigned int _Mode>
template<int Side, typename OtherDerived >
void Eigen::TriangularViewImpl< _MatrixType, _Mode, Dense >::solveInPlace |
( |
const MatrixBase< OtherDerived > & |
other | ) |
const |
"in-place" version of TriangularView::solve() where the result is written in other
- Warning
- The parameter is only marked 'const' to make the C++ compiler accept a temporary expression here. This function will const_cast it, so constness isn't honored here.
Note that the template parameter Side
can be omitted, in which case Side==OnTheLeft
See TriangularView:solve() for the details.