11 #ifndef EIGEN_FULLPIVOTINGHOUSEHOLDERQR_H
12 #define EIGEN_FULLPIVOTINGHOUSEHOLDERQR_H
21 template <
typename MatrixType_,
typename PermutationIndex_>
29 template <
typename MatrixType,
typename PermutationIndex>
30 struct FullPivHouseholderQRMatrixQReturnType;
32 template <
typename MatrixType,
typename PermutationIndex>
62 template <
typename MatrixType_,
typename PermutationIndex_>
128 template <
typename InputType>
148 template <
typename InputType>
161 #ifdef EIGEN_PARSED_BY_DOXYGEN
177 template <
typename Rhs>
192 template <
typename InputType>
410 #ifndef EIGEN_PARSED_BY_DOXYGEN
411 template <
typename RhsType,
typename DstType>
414 template <
bool Conjugate,
typename RhsType,
typename DstType>
439 eigen_assert(
m_qr.rows() ==
m_qr.cols() &&
"You can't take the determinant of a non-square matrix!");
445 template <
typename MatrixType,
typename PermutationIndex>
449 eigen_assert(
m_qr.rows() ==
m_qr.cols() &&
"You can't take the determinant of a non-square matrix!");
453 template <
typename MatrixType,
typename PermutationIndex>
456 eigen_assert(
m_qr.rows() ==
m_qr.cols() &&
"You can't take the determinant of a non-square matrix!");
460 template <
typename MatrixType,
typename PermutationIndex>
463 eigen_assert(
m_qr.rows() ==
m_qr.cols() &&
"You can't take the determinant of a non-square matrix!");
475 template <
typename MatrixType,
typename PermutationIndex>
476 template <
typename InputType>
484 template <
typename MatrixType,
typename PermutationIndex>
500 Index number_of_transpositions = 0;
508 Index row_of_biggest_in_corner, col_of_biggest_in_corner;
510 typedef typename Scoring::result_type Score;
513 .unaryExpr(Scoring())
514 .maxCoeff(&row_of_biggest_in_corner, &col_of_biggest_in_corner);
515 row_of_biggest_in_corner +=
k;
516 col_of_biggest_in_corner +=
k;
519 if (
k == 0) biggest = biggest_in_corner;
534 if (
k != row_of_biggest_in_corner) {
536 ++number_of_transpositions;
538 if (
k != col_of_biggest_in_corner) {
539 m_qr.col(
k).swap(
m_qr.col(col_of_biggest_in_corner));
540 ++number_of_transpositions;
557 m_det_p = (number_of_transpositions % 2) ? -1 : 1;
561 #ifndef EIGEN_PARSED_BY_DOXYGEN
562 template <
typename MatrixType_,
typename PermutationIndex_>
563 template <
typename RhsType,
typename DstType>
574 typename RhsType::PlainObject
c(rhs);
577 for (
Index k = 0;
k < l_rank; ++
k) {
580 c.bottomRightCorner(remainingSize, rhs.cols())
584 m_qr.topLeftCorner(l_rank, l_rank).template triangularView<Upper>().solveInPlace(
c.topRows(l_rank));
590 template <
typename MatrixType_,
typename PermutationIndex_>
591 template <
bool Conjugate,
typename RhsType,
typename DstType>
593 DstType& dst)
const {
603 m_qr.topLeftCorner(l_rank, l_rank)
604 .template triangularView<Upper>()
606 .template conjugateIf<Conjugate>()
607 .solveInPlace(
c.topRows(l_rank));
609 dst.topRows(l_rank) =
c.topRows(l_rank);
610 dst.bottomRows(
rows() - l_rank).setZero();
617 dst.bottomRightCorner(remainingSize, dst.cols())
618 .applyHouseholderOnTheLeft(
m_qr.col(
k).tail(remainingSize - 1).template conjugateIf<!Conjugate>(),
628 template <
typename DstXprType,
typename MatrixType,
typename PermutationIndex>
631 typename FullPivHouseholderQR<MatrixType, PermutationIndex>::Scalar>,
647 template <
typename MatrixType,
typename PermutationIndex>
649 :
public ReturnByValue<FullPivHouseholderQRMatrixQReturnType<MatrixType, PermutationIndex> > {
654 MatrixType::MaxRowsAtCompileTime>
661 template <
typename ResultType>
665 evalTo(result, workspace);
668 template <
typename ResultType>
682 result.row(
k).swap(result.row(m_rowsTranspositions.coeff(
k)));
690 typename MatrixType::Nested
m_qr;
702 template <
typename MatrixType,
typename PermutationIndex>
713 template <
typename Derived>
714 template <
typename PermutationIndex>
AnnoyingScalar abs(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:135
AnnoyingScalar conj(const AnnoyingScalar &x)
Definition: AnnoyingScalar.h:133
int i
Definition: BiCGSTAB_step_by_step.cpp:9
HouseholderQR< MatrixXf > qr(A)
#define EIGEN_GENERIC_PUBLIC_INTERFACE(Derived)
Definition: Macros.h:1149
#define eigen_assert(x)
Definition: Macros.h:910
#define EIGEN_STATIC_ASSERT_NON_INTEGER(TYPE)
Definition: StaticAssert.h:74
Scalar * b
Definition: benchVecAdd.cpp:17
SCALAR Scalar
Definition: bench_gemm.cpp:45
NumTraits< Scalar >::Real RealScalar
Definition: bench_gemm.cpp:46
MatrixXf MatrixType
Definition: benchmark-blocking-sizes.cpp:52
Householder rank-revealing QR decomposition of a matrix with full pivoting.
Definition: FullPivHouseholderQR.h:63
IntDiagSizeVectorType m_rows_transpositions
Definition: FullPivHouseholderQR.h:425
const MatrixType & matrixQR() const
Definition: FullPivHouseholderQR.h:187
const IntDiagSizeVectorType & rowsTranspositions() const
Definition: FullPivHouseholderQR.h:202
FullPivHouseholderQR & compute(const EigenBase< InputType > &matrix)
Index m_det_p
Definition: FullPivHouseholderQR.h:433
Index dimensionOfKernel() const
Definition: FullPivHouseholderQR.h:286
const PermutationType & colsPermutation() const
Definition: FullPivHouseholderQR.h:196
void computeInPlace()
Definition: FullPivHouseholderQR.h:485
RowVectorType m_temp
Definition: FullPivHouseholderQR.h:428
internal::plain_col_type< MatrixType >::type ColVectorType
Definition: FullPivHouseholderQR.h:82
IntDiagSizeVectorType m_cols_transpositions
Definition: FullPivHouseholderQR.h:426
MatrixQReturnType matrixQ(void) const
Definition: FullPivHouseholderQR.h:704
Index rows() const
Definition: FullPivHouseholderQR.h:336
RealScalar m_prescribedThreshold
Definition: FullPivHouseholderQR.h:430
const HCoeffsType & hCoeffs() const
Definition: FullPivHouseholderQR.h:343
bool isInjective() const
Definition: FullPivHouseholderQR.h:298
bool isInvertible() const
Definition: FullPivHouseholderQR.h:321
MatrixType::RealScalar logAbsDeterminant() const
Definition: FullPivHouseholderQR.h:454
Index rank() const
Definition: FullPivHouseholderQR.h:271
PermutationMatrix< ColsAtCompileTime, MaxColsAtCompileTime, PermutationIndex > PermutationType
Definition: FullPivHouseholderQR.h:80
bool m_usePrescribedThreshold
Definition: FullPivHouseholderQR.h:429
HCoeffsType m_hCoeffs
Definition: FullPivHouseholderQR.h:424
void _solve_impl_transposed(const RhsType &rhs, DstType &dst) const
Definition: FullPivHouseholderQR.h:592
MatrixType m_qr
Definition: FullPivHouseholderQR.h:423
internal::plain_diag_type< MatrixType >::type HCoeffsType
Definition: FullPivHouseholderQR.h:76
bool isSurjective() const
Definition: FullPivHouseholderQR.h:310
RealScalar m_precision
Definition: FullPivHouseholderQR.h:432
internal::FullPivHouseholderQRMatrixQReturnType< MatrixType, PermutationIndex > MatrixQReturnType
Definition: FullPivHouseholderQR.h:75
RealScalar maxPivot() const
Definition: FullPivHouseholderQR.h:408
MatrixType::Scalar determinant() const
Definition: FullPivHouseholderQR.h:437
FullPivHouseholderQR()
Default Constructor.
Definition: FullPivHouseholderQR.h:90
void _solve_impl(const RhsType &rhs, DstType &dst) const
Definition: FullPivHouseholderQR.h:564
MatrixType::PlainObject PlainObject
Definition: FullPivHouseholderQR.h:83
MatrixType_ MatrixType
Definition: FullPivHouseholderQR.h:65
PermutationType m_cols_permutation
Definition: FullPivHouseholderQR.h:427
MatrixType::RealScalar absDeterminant() const
Definition: FullPivHouseholderQR.h:446
FullPivHouseholderQR(Index rows, Index cols)
Default Constructor with memory preallocation.
Definition: FullPivHouseholderQR.h:106
const Inverse< FullPivHouseholderQR > inverse() const
Definition: FullPivHouseholderQR.h:331
Index cols() const
Definition: FullPivHouseholderQR.h:337
FullPivHouseholderQR(const EigenBase< InputType > &matrix)
Constructs a QR factorization from a given matrix.
Definition: FullPivHouseholderQR.h:129
SolverBase< FullPivHouseholderQR > Base
Definition: FullPivHouseholderQR.h:66
bool m_isInitialized
Definition: FullPivHouseholderQR.h:429
FullPivHouseholderQR & setThreshold(const RealScalar &threshold)
Definition: FullPivHouseholderQR.h:362
FullPivHouseholderQR(EigenBase< InputType > &matrix)
Constructs a QR factorization from a given matrix.
Definition: FullPivHouseholderQR.h:149
Matrix< PermutationIndex, 1, internal::min_size_prefer_dynamic(ColsAtCompileTime, RowsAtCompileTime), RowMajor, 1, internal::min_size_prefer_fixed(MaxColsAtCompileTime, MaxRowsAtCompileTime)> IntDiagSizeVectorType
Definition: FullPivHouseholderQR.h:79
@ MaxColsAtCompileTime
Definition: FullPivHouseholderQR.h:73
@ MaxRowsAtCompileTime
Definition: FullPivHouseholderQR.h:72
internal::plain_row_type< MatrixType >::type RowVectorType
Definition: FullPivHouseholderQR.h:81
FullPivHouseholderQR & setThreshold(Default_t)
Definition: FullPivHouseholderQR.h:376
Index m_nonzero_pivots
Definition: FullPivHouseholderQR.h:431
RealScalar m_maxpivot
Definition: FullPivHouseholderQR.h:430
PermutationIndex_ PermutationIndex
Definition: FullPivHouseholderQR.h:68
Index nonzeroPivots() const
Definition: FullPivHouseholderQR.h:400
RealScalar threshold() const
Definition: FullPivHouseholderQR.h:385
MatrixType::Scalar signDeterminant() const
Definition: FullPivHouseholderQR.h:461
Expression of the inverse of another expression.
Definition: Inverse.h:43
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols() const EIGEN_NOEXCEPT
Definition: Inverse.h:55
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows() const EIGEN_NOEXCEPT
Definition: Inverse.h:54
EIGEN_DEVICE_FUNC const XprTypeNestedCleaned & nestedExpression() const
Definition: Inverse.h:57
Base class for all dense matrices, vectors, and expressions.
Definition: MatrixBase.h:52
const FullPivHouseholderQR< PlainObject, PermutationIndex > fullPivHouseholderQr() const
The matrix class, also used for vectors and row-vectors.
Definition: Eigen/Eigen/src/Core/Matrix.h:186
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE Scalar & coeffRef(Index rowId, Index colId)
Definition: PlainObjectBase.h:217
InverseReturnType transpose() const
Definition: PermutationMatrix.h:177
Derived & applyTranspositionOnTheRight(Index i, Index j)
Definition: PermutationMatrix.h:162
void setIdentity()
Definition: PermutationMatrix.h:122
const IndicesType & indices() const
Definition: PermutationMatrix.h:334
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE const Scalar & coeff(Index rowId, Index colId) const
Definition: PlainObjectBase.h:198
EIGEN_DEVICE_FUNC constexpr EIGEN_STRONG_INLINE void resize(Index rows, Index cols)
Definition: PlainObjectBase.h:294
Definition: ReturnByValue.h:50
Pseudo expression representing a solving operation.
Definition: Solve.h:62
A base class for matrix decomposition and solvers.
Definition: SolverBase.h:72
internal::traits< Derived >::Scalar Scalar
Definition: SolverBase.h:75
constexpr EIGEN_DEVICE_FUNC FullPivHouseholderQR< MatrixType_, PermutationIndex_ > & derived()
Definition: EigenBase.h:49
const Solve< FullPivHouseholderQR< MatrixType_, PermutationIndex_ >, Rhs > solve(const MatrixBase< Rhs > &b) const
Definition: SolverBase.h:106
@ RowsAtCompileTime
Definition: SolverBase.h:82
@ ColsAtCompileTime
Definition: SolverBase.h:83
Eigen::Map< Eigen::Matrix< T, Eigen::Dynamic, Eigen::Dynamic, Eigen::ColMajor >, 0, Eigen::OuterStride<> > matrix(T *data, int rows, int cols, int stride)
Definition: common.h:85
#define min(a, b)
Definition: datatypes.h:22
@ RowMajor
Definition: Constants.h:320
Scalar beta
Definition: level2_cplx_impl.h:36
char char char int int * k
Definition: level2_impl.h:374
constexpr int min_size_prefer_fixed(A a, B b)
Definition: Meta.h:683
EIGEN_DEVICE_FUNC bool isMuchSmallerThan(const Scalar &x, const OtherScalar &y, const typename NumTraits< Scalar >::Real &precision=NumTraits< Scalar >::dummy_precision())
Definition: MathFunctions.h:1916
constexpr int min_size_prefer_dynamic(A a, B b)
Definition: Meta.h:668
Namespace containing all symbols from the Eigen library.
Definition: bench_norm.cpp:70
auto run(Kernel kernel, Args &&... args) -> decltype(kernel(args...))
Definition: gpu_test_helper.h:414
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:83
CleanedUpDerType< DerType >::type() min(const AutoDiffScalar< DerType > &x, const T &y)
Definition: AutoDiffScalar.h:494
Default_t
Definition: Constants.h:361
const AutoDiffScalar< DerType > & conj(const AutoDiffScalar< DerType > &x)
Definition: AutoDiffScalar.h:482
Extend namespace for flags.
Definition: fsi_chan_precond_driver.cc:56
int c
Definition: calibrate.py:100
Definition: Eigen_Colamd.h:49
double epsilon
Definition: osc_ring_sarah_asymptotics.h:43
internal::nested_eval< T, 1 >::type eval(const T &xpr)
Definition: sparse_permutations.cpp:47
Definition: EigenBase.h:33
Eigen::Index Index
The interface type of indices.
Definition: EigenBase.h:43
EIGEN_DEVICE_FUNC void evalTo(Dest &dst) const
Definition: EigenBase.h:68
EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index size() const EIGEN_NOEXCEPT
Definition: EigenBase.h:64
Definition: Constants.h:534
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:217
Definition: Constants.h:525
static void run(DstXprType &dst, const SrcXprType &src, const internal::assign_op< typename DstXprType::Scalar, typename QrType::Scalar > &)
Definition: FullPivHouseholderQR.h:635
Inverse< QrType > SrcXprType
Definition: FullPivHouseholderQR.h:634
FullPivHouseholderQR< MatrixType, PermutationIndex > QrType
Definition: FullPivHouseholderQR.h:633
Definition: AssignEvaluator.h:773
Definition: AssignEvaluator.h:756
Expression type for return value of FullPivHouseholderQR::matrixQ()
Definition: FullPivHouseholderQR.h:649
internal::plain_diag_type< MatrixType >::type HCoeffsType
Definition: FullPivHouseholderQR.h:652
void evalTo(ResultType &result) const
Definition: FullPivHouseholderQR.h:662
Matrix< typename MatrixType::Scalar, 1, MatrixType::RowsAtCompileTime, RowMajor, 1, MatrixType::MaxRowsAtCompileTime > WorkVectorType
Definition: FullPivHouseholderQR.h:655
Index rows() const
Definition: FullPivHouseholderQR.h:686
FullPivHouseholderQR< MatrixType, PermutationIndex >::IntDiagSizeVectorType IntDiagSizeVectorType
Definition: FullPivHouseholderQR.h:651
void evalTo(ResultType &result, WorkVectorType &workspace) const
Definition: FullPivHouseholderQR.h:669
IntDiagSizeVectorType::Nested m_rowsTranspositions
Definition: FullPivHouseholderQR.h:692
FullPivHouseholderQRMatrixQReturnType(const MatrixType &qr, const HCoeffsType &hCoeffs, const IntDiagSizeVectorType &rowsTranspositions)
Definition: FullPivHouseholderQR.h:657
HCoeffsType::Nested m_hCoeffs
Definition: FullPivHouseholderQR.h:691
Index cols() const
Definition: FullPivHouseholderQR.h:687
MatrixType::Nested m_qr
Definition: FullPivHouseholderQR.h:690
Definition: functors/UnaryFunctors.h:71
Template functor for scalar/packet assignment.
Definition: AssignmentFunctors.h:25
Definition: HouseholderQR.h:280
std::conditional_t< is_same< typename traits< ExpressionType >::XprKind, MatrixXpr >::value, MatrixColType, ArrayColType > type
Definition: XprHelper.h:782
std::conditional_t< is_same< typename traits< ExpressionType >::XprKind, MatrixXpr >::value, MatrixDiagType, ArrayDiagType > type
Definition: XprHelper.h:797
std::conditional_t< is_same< typename traits< ExpressionType >::XprKind, MatrixXpr >::value, MatrixRowType, ArrayRowType > type
Definition: XprHelper.h:768
Template functor to compute the score of a scalar, to chose a pivot.
Definition: functors/UnaryFunctors.h:63
MatrixType::PlainObject ReturnType
Definition: FullPivHouseholderQR.h:34
MatrixXpr XprKind
Definition: FullPivHouseholderQR.h:23
PermutationIndex_ PermutationIndex
Definition: FullPivHouseholderQR.h:25
SolverStorage StorageKind
Definition: FullPivHouseholderQR.h:24
Definition: ForwardDeclarations.h:21