@smake/eigen 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -21
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +235 -326
- package/eigen/Eigen/Eigenvalues +16 -14
- package/eigen/Eigen/Geometry +21 -24
- package/eigen/Eigen/Householder +9 -8
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -14
- package/eigen/Eigen/KLUSupport +43 -0
- package/eigen/Eigen/LU +16 -20
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -54
- package/eigen/Eigen/PaStiXSupport +23 -20
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -21
- package/eigen/Eigen/QtAlignedMalloc +5 -13
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -18
- package/eigen/Eigen/Sparse +1 -4
- package/eigen/Eigen/SparseCholesky +18 -23
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +12 -8
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
- package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
- package/eigen/Eigen/src/Core/Array.h +341 -294
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
- package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
- package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
- package/eigen/Eigen/src/Core/Block.h +375 -398
- package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
- package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
- package/eigen/Eigen/src/Core/DenseBase.h +632 -571
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
- package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +169 -210
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +172 -222
- package/eigen/Eigen/src/Core/EigenBase.h +75 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
- package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
- package/eigen/Eigen/src/Core/IO.h +147 -139
- package/eigen/Eigen/src/Core/IndexedView.h +321 -0
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +56 -66
- package/eigen/Eigen/src/Core/Map.h +124 -142
- package/eigen/Eigen/src/Core/MapBase.h +256 -281
- package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
- package/eigen/Eigen/src/Core/Matrix.h +491 -416
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
- package/eigen/Eigen/src/Core/NestByValue.h +66 -85
- package/eigen/Eigen/src/Core/NoAlias.h +79 -85
- package/eigen/Eigen/src/Core/NumTraits.h +235 -148
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
- package/eigen/Eigen/src/Core/Product.h +260 -139
- package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
- package/eigen/Eigen/src/Core/Random.h +161 -136
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +366 -336
- package/eigen/Eigen/src/Core/Ref.h +308 -209
- package/eigen/Eigen/src/Core/Replicate.h +94 -106
- package/eigen/Eigen/src/Core/Reshaped.h +398 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
- package/eigen/Eigen/src/Core/Reverse.h +136 -145
- package/eigen/Eigen/src/Core/Select.h +70 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +97 -111
- package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
- package/eigen/Eigen/src/Core/SolverBase.h +138 -101
- package/eigen/Eigen/src/Core/StableNorm.h +156 -160
- package/eigen/Eigen/src/Core/StlIterators.h +619 -0
- package/eigen/Eigen/src/Core/Stride.h +91 -88
- package/eigen/Eigen/src/Core/Swap.h +70 -38
- package/eigen/Eigen/src/Core/Transpose.h +295 -273
- package/eigen/Eigen/src/Core/Transpositions.h +272 -317
- package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
- package/eigen/Eigen/src/Core/Visitor.h +480 -216
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
- package/eigen/Eigen/src/Core/util/Constants.h +314 -263
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
- package/eigen/Eigen/src/Core/util/Macros.h +939 -646
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
- package/eigen/Eigen/src/Core/util/Meta.h +618 -426
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
- package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
- package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
- package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
- package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
- package/eigen/Eigen/src/Geometry/Transform.h +896 -953
- package/eigen/Eigen/src/Geometry/Translation.h +100 -98
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
- package/eigen/Eigen/src/Householder/Householder.h +104 -122
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
- package/eigen/Eigen/src/LU/Determinant.h +60 -63
- package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
- package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
- package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
- package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/lib/LibEigen.d.ts +4 -0
- package/lib/LibEigen.js +14 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +7 -3
- package/package.json +2 -10
- package/eigen/Eigen/CMakeLists.txt +0 -19
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
- package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
- package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
- package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -12,313 +12,442 @@
|
|
|
12
12
|
#ifndef EIGEN_QR_H
|
|
13
13
|
#define EIGEN_QR_H
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
// IWYU pragma: private
|
|
16
|
+
#include "./InternalHeaderCheck.h"
|
|
17
|
+
|
|
18
|
+
namespace Eigen {
|
|
19
|
+
|
|
20
|
+
namespace internal {
|
|
21
|
+
template <typename MatrixType_>
|
|
22
|
+
struct traits<HouseholderQR<MatrixType_>> : traits<MatrixType_> {
|
|
23
|
+
typedef MatrixXpr XprKind;
|
|
24
|
+
typedef SolverStorage StorageKind;
|
|
25
|
+
typedef int StorageIndex;
|
|
26
|
+
enum { Flags = 0 };
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
} // end namespace internal
|
|
16
30
|
|
|
17
31
|
/** \ingroup QR_Module
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
template<typename
|
|
45
|
-
{
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
32
|
+
*
|
|
33
|
+
*
|
|
34
|
+
* \class HouseholderQR
|
|
35
|
+
*
|
|
36
|
+
* \brief Householder QR decomposition of a matrix
|
|
37
|
+
*
|
|
38
|
+
* \tparam MatrixType_ the type of the matrix of which we are computing the QR decomposition
|
|
39
|
+
*
|
|
40
|
+
* This class performs a QR decomposition of a matrix \b A into matrices \b Q and \b R
|
|
41
|
+
* such that
|
|
42
|
+
* \f[
|
|
43
|
+
* \mathbf{A} = \mathbf{Q} \, \mathbf{R}
|
|
44
|
+
* \f]
|
|
45
|
+
* by using Householder transformations. Here, \b Q a unitary matrix and \b R an upper triangular matrix.
|
|
46
|
+
* The result is stored in a compact way compatible with LAPACK.
|
|
47
|
+
*
|
|
48
|
+
* Note that no pivoting is performed. This is \b not a rank-revealing decomposition.
|
|
49
|
+
* If you want that feature, use FullPivHouseholderQR or ColPivHouseholderQR instead.
|
|
50
|
+
*
|
|
51
|
+
* This Householder QR decomposition is faster, but less numerically stable and less feature-full than
|
|
52
|
+
* FullPivHouseholderQR or ColPivHouseholderQR.
|
|
53
|
+
*
|
|
54
|
+
* This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
|
|
55
|
+
*
|
|
56
|
+
* \sa MatrixBase::householderQr()
|
|
57
|
+
*/
|
|
58
|
+
template <typename MatrixType_>
|
|
59
|
+
class HouseholderQR : public SolverBase<HouseholderQR<MatrixType_>> {
|
|
60
|
+
public:
|
|
61
|
+
typedef MatrixType_ MatrixType;
|
|
62
|
+
typedef SolverBase<HouseholderQR> Base;
|
|
63
|
+
friend class SolverBase<HouseholderQR>;
|
|
64
|
+
|
|
65
|
+
EIGEN_GENERIC_PUBLIC_INTERFACE(HouseholderQR)
|
|
66
|
+
enum {
|
|
67
|
+
MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
|
|
68
|
+
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
|
|
69
|
+
};
|
|
70
|
+
typedef Matrix<Scalar, RowsAtCompileTime, RowsAtCompileTime, (MatrixType::Flags & RowMajorBit) ? RowMajor : ColMajor,
|
|
71
|
+
MaxRowsAtCompileTime, MaxRowsAtCompileTime>
|
|
72
|
+
MatrixQType;
|
|
73
|
+
typedef typename internal::plain_diag_type<MatrixType>::type HCoeffsType;
|
|
74
|
+
typedef typename internal::plain_row_type<MatrixType>::type RowVectorType;
|
|
75
|
+
typedef HouseholderSequence<MatrixType, internal::remove_all_t<typename HCoeffsType::ConjugateReturnType>>
|
|
76
|
+
HouseholderSequenceType;
|
|
77
|
+
|
|
78
|
+
/** \brief Reports whether the QR factorization was successful.
|
|
79
|
+
*
|
|
80
|
+
* \note This function always returns \c Success. It is provided for compatibility
|
|
81
|
+
* with other factorization routines.
|
|
82
|
+
* \returns \c Success
|
|
83
|
+
*/
|
|
84
|
+
ComputationInfo info() const {
|
|
85
|
+
eigen_assert(m_isInitialized && "HouseHolderQR is not initialized.");
|
|
86
|
+
return Success;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* \brief Default Constructor.
|
|
91
|
+
*
|
|
92
|
+
* The default constructor is useful in cases in which the user intends to
|
|
93
|
+
* perform decompositions via HouseholderQR::compute(const MatrixType&).
|
|
94
|
+
*/
|
|
95
|
+
HouseholderQR() : m_qr(), m_hCoeffs(), m_temp(), m_isInitialized(false) {}
|
|
96
|
+
|
|
97
|
+
/** \brief Default Constructor with memory preallocation
|
|
98
|
+
*
|
|
99
|
+
* Like the default constructor but with preallocation of the internal data
|
|
100
|
+
* according to the specified problem \a size.
|
|
101
|
+
* \sa HouseholderQR()
|
|
102
|
+
*/
|
|
103
|
+
HouseholderQR(Index rows, Index cols)
|
|
104
|
+
: m_qr(rows, cols), m_hCoeffs((std::min)(rows, cols)), m_temp(cols), m_isInitialized(false) {}
|
|
105
|
+
|
|
106
|
+
/** \brief Constructs a QR factorization from a given matrix
|
|
107
|
+
*
|
|
108
|
+
* This constructor computes the QR factorization of the matrix \a matrix by calling
|
|
109
|
+
* the method compute(). It is a short cut for:
|
|
110
|
+
*
|
|
111
|
+
* \code
|
|
112
|
+
* HouseholderQR<MatrixType> qr(matrix.rows(), matrix.cols());
|
|
113
|
+
* qr.compute(matrix);
|
|
114
|
+
* \endcode
|
|
115
|
+
*
|
|
116
|
+
* \sa compute()
|
|
117
|
+
*/
|
|
118
|
+
template <typename InputType>
|
|
119
|
+
explicit HouseholderQR(const EigenBase<InputType>& matrix)
|
|
98
120
|
: m_qr(matrix.rows(), matrix.cols()),
|
|
99
|
-
m_hCoeffs((std::min)(matrix.rows(),matrix.cols())),
|
|
121
|
+
m_hCoeffs((std::min)(matrix.rows(), matrix.cols())),
|
|
100
122
|
m_temp(matrix.cols()),
|
|
101
|
-
m_isInitialized(false)
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
105
|
-
|
|
123
|
+
m_isInitialized(false) {
|
|
124
|
+
compute(matrix.derived());
|
|
125
|
+
}
|
|
106
126
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
127
|
+
/** \brief Constructs a QR factorization from a given matrix
|
|
128
|
+
*
|
|
129
|
+
* This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when
|
|
130
|
+
* \c MatrixType is a Eigen::Ref.
|
|
131
|
+
*
|
|
132
|
+
* \sa HouseholderQR(const EigenBase&)
|
|
133
|
+
*/
|
|
134
|
+
template <typename InputType>
|
|
135
|
+
explicit HouseholderQR(EigenBase<InputType>& matrix)
|
|
116
136
|
: m_qr(matrix.derived()),
|
|
117
|
-
m_hCoeffs((std::min)(matrix.rows(),matrix.cols())),
|
|
137
|
+
m_hCoeffs((std::min)(matrix.rows(), matrix.cols())),
|
|
118
138
|
m_temp(matrix.cols()),
|
|
119
|
-
m_isInitialized(false)
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
139
|
+
m_isInitialized(false) {
|
|
140
|
+
computeInPlace();
|
|
141
|
+
}
|
|
123
142
|
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
|
|
143
|
-
return Solve<HouseholderQR, Rhs>(*this, b.derived());
|
|
144
|
-
}
|
|
143
|
+
#ifdef EIGEN_PARSED_BY_DOXYGEN
|
|
144
|
+
/** This method finds a solution x to the equation Ax=b, where A is the matrix of which
|
|
145
|
+
* *this is the QR decomposition, if any exists.
|
|
146
|
+
*
|
|
147
|
+
* \param b the right-hand-side of the equation to solve.
|
|
148
|
+
*
|
|
149
|
+
* \returns a solution.
|
|
150
|
+
*
|
|
151
|
+
* \note_about_checking_solutions
|
|
152
|
+
*
|
|
153
|
+
* \note_about_arbitrary_choice_of_solution
|
|
154
|
+
*
|
|
155
|
+
* Example: \include HouseholderQR_solve.cpp
|
|
156
|
+
* Output: \verbinclude HouseholderQR_solve.out
|
|
157
|
+
*/
|
|
158
|
+
template <typename Rhs>
|
|
159
|
+
inline const Solve<HouseholderQR, Rhs> solve(const MatrixBase<Rhs>& b) const;
|
|
160
|
+
#endif
|
|
145
161
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
162
|
+
/** This method returns an expression of the unitary matrix Q as a sequence of Householder transformations.
|
|
163
|
+
*
|
|
164
|
+
* The returned expression can directly be used to perform matrix products. It can also be assigned to a dense Matrix
|
|
165
|
+
* object. Here is an example showing how to recover the full or thin matrix Q, as well as how to perform matrix
|
|
166
|
+
* products using operator*:
|
|
167
|
+
*
|
|
168
|
+
* Example: \include HouseholderQR_householderQ.cpp
|
|
169
|
+
* Output: \verbinclude HouseholderQR_householderQ.out
|
|
170
|
+
*/
|
|
171
|
+
HouseholderSequenceType householderQ() const {
|
|
172
|
+
eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
|
|
173
|
+
return HouseholderSequenceType(m_qr, m_hCoeffs.conjugate());
|
|
174
|
+
}
|
|
159
175
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
}
|
|
176
|
+
/** \returns a reference to the matrix where the Householder QR decomposition is stored
|
|
177
|
+
* in a LAPACK-compatible way.
|
|
178
|
+
*/
|
|
179
|
+
const MatrixType& matrixQR() const {
|
|
180
|
+
eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
|
|
181
|
+
return m_qr;
|
|
182
|
+
}
|
|
168
183
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
184
|
+
template <typename InputType>
|
|
185
|
+
HouseholderQR& compute(const EigenBase<InputType>& matrix) {
|
|
186
|
+
m_qr = matrix.derived();
|
|
187
|
+
computeInPlace();
|
|
188
|
+
return *this;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** \returns the determinant of the matrix of which
|
|
192
|
+
* *this is the QR decomposition. It has only linear complexity
|
|
193
|
+
* (that is, O(n) where n is the dimension of the square matrix)
|
|
194
|
+
* as the QR decomposition has already been computed.
|
|
195
|
+
*
|
|
196
|
+
* \note This is only for square matrices.
|
|
197
|
+
*
|
|
198
|
+
* \warning a determinant can be very big or small, so for matrices
|
|
199
|
+
* of large enough dimension, there is a risk of overflow/underflow.
|
|
200
|
+
* One way to work around that is to use logAbsDeterminant() instead.
|
|
201
|
+
* Also, do not rely on the determinant being exactly zero for testing
|
|
202
|
+
* singularity or rank-deficiency.
|
|
203
|
+
*
|
|
204
|
+
* \sa absDeterminant(), logAbsDeterminant(), MatrixBase::determinant()
|
|
205
|
+
*/
|
|
206
|
+
typename MatrixType::Scalar determinant() const;
|
|
207
|
+
|
|
208
|
+
/** \returns the absolute value of the determinant of the matrix of which
|
|
209
|
+
* *this is the QR decomposition. It has only linear complexity
|
|
210
|
+
* (that is, O(n) where n is the dimension of the square matrix)
|
|
211
|
+
* as the QR decomposition has already been computed.
|
|
212
|
+
*
|
|
213
|
+
* \note This is only for square matrices.
|
|
214
|
+
*
|
|
215
|
+
* \warning a determinant can be very big or small, so for matrices
|
|
216
|
+
* of large enough dimension, there is a risk of overflow/underflow.
|
|
217
|
+
* One way to work around that is to use logAbsDeterminant() instead.
|
|
218
|
+
* Also, do not rely on the determinant being exactly zero for testing
|
|
219
|
+
* singularity or rank-deficiency.
|
|
220
|
+
*
|
|
221
|
+
* \sa determinant(), logAbsDeterminant(), MatrixBase::determinant()
|
|
222
|
+
*/
|
|
223
|
+
typename MatrixType::RealScalar absDeterminant() const;
|
|
224
|
+
|
|
225
|
+
/** \returns the natural log of the absolute value of the determinant of the matrix of which
|
|
226
|
+
* *this is the QR decomposition. It has only linear complexity
|
|
227
|
+
* (that is, O(n) where n is the dimension of the square matrix)
|
|
228
|
+
* as the QR decomposition has already been computed.
|
|
229
|
+
*
|
|
230
|
+
* \note This is only for square matrices.
|
|
231
|
+
*
|
|
232
|
+
* \note This method is useful to work around the risk of overflow/underflow that's inherent
|
|
233
|
+
* to determinant computation.
|
|
234
|
+
*
|
|
235
|
+
* \warning Do not rely on the determinant being exactly zero for testing
|
|
236
|
+
* singularity or rank-deficiency.
|
|
237
|
+
*
|
|
238
|
+
* \sa determinant(), absDeterminant(), MatrixBase::determinant()
|
|
239
|
+
*/
|
|
240
|
+
typename MatrixType::RealScalar logAbsDeterminant() const;
|
|
241
|
+
|
|
242
|
+
/** \returns the sign of the determinant of the matrix of which
|
|
243
|
+
* *this is the QR decomposition. It has only linear complexity
|
|
244
|
+
* (that is, O(n) where n is the dimension of the square matrix)
|
|
245
|
+
* as the QR decomposition has already been computed.
|
|
246
|
+
*
|
|
247
|
+
* \note This is only for square matrices.
|
|
248
|
+
*
|
|
249
|
+
* \note This method is useful to work around the risk of overflow/underflow that's inherent
|
|
250
|
+
* to determinant computation.
|
|
251
|
+
*
|
|
252
|
+
* \warning Do not rely on the determinant being exactly zero for testing
|
|
253
|
+
* singularity or rank-deficiency.
|
|
254
|
+
*
|
|
255
|
+
* \sa determinant(), absDeterminant(), MatrixBase::determinant()
|
|
256
|
+
*/
|
|
257
|
+
typename MatrixType::Scalar signDeterminant() const;
|
|
258
|
+
|
|
259
|
+
inline Index rows() const { return m_qr.rows(); }
|
|
260
|
+
inline Index cols() const { return m_qr.cols(); }
|
|
261
|
+
|
|
262
|
+
/** \returns a const reference to the vector of Householder coefficients used to represent the factor \c Q.
|
|
263
|
+
*
|
|
264
|
+
* For advanced uses only.
|
|
265
|
+
*/
|
|
266
|
+
const HCoeffsType& hCoeffs() const { return m_hCoeffs; }
|
|
267
|
+
|
|
268
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
269
|
+
template <typename RhsType, typename DstType>
|
|
270
|
+
void _solve_impl(const RhsType& rhs, DstType& dst) const;
|
|
271
|
+
|
|
272
|
+
template <bool Conjugate, typename RhsType, typename DstType>
|
|
273
|
+
void _solve_impl_transposed(const RhsType& rhs, DstType& dst) const;
|
|
274
|
+
#endif
|
|
275
|
+
|
|
276
|
+
protected:
|
|
277
|
+
EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
|
|
278
|
+
|
|
279
|
+
void computeInPlace();
|
|
280
|
+
|
|
281
|
+
MatrixType m_qr;
|
|
282
|
+
HCoeffsType m_hCoeffs;
|
|
283
|
+
RowVectorType m_temp;
|
|
284
|
+
bool m_isInitialized;
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
namespace internal {
|
|
175
288
|
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
* \sa logAbsDeterminant(), MatrixBase::determinant()
|
|
188
|
-
*/
|
|
189
|
-
typename MatrixType::RealScalar absDeterminant() const;
|
|
190
|
-
|
|
191
|
-
/** \returns the natural log of the absolute value of the determinant of the matrix of which
|
|
192
|
-
* *this is the QR decomposition. It has only linear complexity
|
|
193
|
-
* (that is, O(n) where n is the dimension of the square matrix)
|
|
194
|
-
* as the QR decomposition has already been computed.
|
|
195
|
-
*
|
|
196
|
-
* \note This is only for square matrices.
|
|
197
|
-
*
|
|
198
|
-
* \note This method is useful to work around the risk of overflow/underflow that's inherent
|
|
199
|
-
* to determinant computation.
|
|
200
|
-
*
|
|
201
|
-
* \sa absDeterminant(), MatrixBase::determinant()
|
|
202
|
-
*/
|
|
203
|
-
typename MatrixType::RealScalar logAbsDeterminant() const;
|
|
204
|
-
|
|
205
|
-
inline Index rows() const { return m_qr.rows(); }
|
|
206
|
-
inline Index cols() const { return m_qr.cols(); }
|
|
207
|
-
|
|
208
|
-
/** \returns a const reference to the vector of Householder coefficients used to represent the factor \c Q.
|
|
209
|
-
*
|
|
210
|
-
* For advanced uses only.
|
|
211
|
-
*/
|
|
212
|
-
const HCoeffsType& hCoeffs() const { return m_hCoeffs; }
|
|
213
|
-
|
|
214
|
-
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
215
|
-
template<typename RhsType, typename DstType>
|
|
216
|
-
EIGEN_DEVICE_FUNC
|
|
217
|
-
void _solve_impl(const RhsType &rhs, DstType &dst) const;
|
|
218
|
-
#endif
|
|
219
|
-
|
|
220
|
-
protected:
|
|
221
|
-
|
|
222
|
-
static void check_template_parameters()
|
|
223
|
-
{
|
|
224
|
-
EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
|
|
289
|
+
/** \internal */
|
|
290
|
+
template <typename HCoeffs, typename Scalar, bool IsComplex>
|
|
291
|
+
struct householder_determinant {
|
|
292
|
+
static void run(const HCoeffs& hCoeffs, Scalar& out_det) {
|
|
293
|
+
out_det = Scalar(1);
|
|
294
|
+
Index size = hCoeffs.rows();
|
|
295
|
+
for (Index i = 0; i < size; i++) {
|
|
296
|
+
// For each valid reflection Q_n,
|
|
297
|
+
// det(Q_n) = - conj(h_n) / h_n
|
|
298
|
+
// where h_n is the Householder coefficient.
|
|
299
|
+
if (hCoeffs(i) != Scalar(0)) out_det *= -numext::conj(hCoeffs(i)) / hCoeffs(i);
|
|
225
300
|
}
|
|
301
|
+
}
|
|
302
|
+
};
|
|
226
303
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
304
|
+
/** \internal */
|
|
305
|
+
template <typename HCoeffs, typename Scalar>
|
|
306
|
+
struct householder_determinant<HCoeffs, Scalar, false> {
|
|
307
|
+
static void run(const HCoeffs& hCoeffs, Scalar& out_det) {
|
|
308
|
+
bool negated = false;
|
|
309
|
+
Index size = hCoeffs.rows();
|
|
310
|
+
for (Index i = 0; i < size; i++) {
|
|
311
|
+
// Each valid reflection negates the determinant.
|
|
312
|
+
if (hCoeffs(i) != Scalar(0)) negated ^= true;
|
|
313
|
+
}
|
|
314
|
+
out_det = negated ? Scalar(-1) : Scalar(1);
|
|
315
|
+
}
|
|
233
316
|
};
|
|
234
317
|
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
318
|
+
} // end namespace internal
|
|
319
|
+
|
|
320
|
+
template <typename MatrixType>
|
|
321
|
+
typename MatrixType::Scalar HouseholderQR<MatrixType>::determinant() const {
|
|
322
|
+
eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
|
|
323
|
+
eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
|
|
324
|
+
Scalar detQ;
|
|
325
|
+
internal::householder_determinant<HCoeffsType, Scalar, NumTraits<Scalar>::IsComplex>::run(m_hCoeffs, detQ);
|
|
326
|
+
return m_qr.diagonal().prod() * detQ;
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
template <typename MatrixType>
|
|
330
|
+
typename MatrixType::RealScalar HouseholderQR<MatrixType>::absDeterminant() const {
|
|
238
331
|
using std::abs;
|
|
239
332
|
eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
|
|
240
333
|
eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
|
|
241
334
|
return abs(m_qr.diagonal().prod());
|
|
242
335
|
}
|
|
243
336
|
|
|
244
|
-
template<typename MatrixType>
|
|
245
|
-
typename MatrixType::RealScalar HouseholderQR<MatrixType>::logAbsDeterminant() const
|
|
246
|
-
{
|
|
337
|
+
template <typename MatrixType>
|
|
338
|
+
typename MatrixType::RealScalar HouseholderQR<MatrixType>::logAbsDeterminant() const {
|
|
247
339
|
eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
|
|
248
340
|
eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
|
|
249
341
|
return m_qr.diagonal().cwiseAbs().array().log().sum();
|
|
250
342
|
}
|
|
251
343
|
|
|
344
|
+
template <typename MatrixType>
|
|
345
|
+
typename MatrixType::Scalar HouseholderQR<MatrixType>::signDeterminant() const {
|
|
346
|
+
eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
|
|
347
|
+
eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
|
|
348
|
+
Scalar detQ;
|
|
349
|
+
internal::householder_determinant<HCoeffsType, Scalar, NumTraits<Scalar>::IsComplex>::run(m_hCoeffs, detQ);
|
|
350
|
+
return detQ * m_qr.diagonal().array().sign().prod();
|
|
351
|
+
}
|
|
352
|
+
|
|
252
353
|
namespace internal {
|
|
253
354
|
|
|
254
355
|
/** \internal */
|
|
255
|
-
template<typename MatrixQR, typename HCoeffs>
|
|
256
|
-
void householder_qr_inplace_unblocked(MatrixQR& mat, HCoeffs& hCoeffs, typename MatrixQR::Scalar* tempData = 0)
|
|
257
|
-
{
|
|
356
|
+
template <typename MatrixQR, typename HCoeffs>
|
|
357
|
+
void householder_qr_inplace_unblocked(MatrixQR& mat, HCoeffs& hCoeffs, typename MatrixQR::Scalar* tempData = 0) {
|
|
258
358
|
typedef typename MatrixQR::Scalar Scalar;
|
|
259
359
|
typedef typename MatrixQR::RealScalar RealScalar;
|
|
260
360
|
Index rows = mat.rows();
|
|
261
361
|
Index cols = mat.cols();
|
|
262
|
-
Index size = (std::min)(rows,cols);
|
|
362
|
+
Index size = (std::min)(rows, cols);
|
|
263
363
|
|
|
264
364
|
eigen_assert(hCoeffs.size() == size);
|
|
265
365
|
|
|
266
|
-
typedef Matrix<Scalar,MatrixQR::ColsAtCompileTime,1> TempType;
|
|
366
|
+
typedef Matrix<Scalar, MatrixQR::ColsAtCompileTime, 1> TempType;
|
|
267
367
|
TempType tempVector;
|
|
268
|
-
if(tempData==0)
|
|
269
|
-
{
|
|
368
|
+
if (tempData == 0) {
|
|
270
369
|
tempVector.resize(cols);
|
|
271
370
|
tempData = tempVector.data();
|
|
272
371
|
}
|
|
273
372
|
|
|
274
|
-
for(Index k = 0; k < size; ++k)
|
|
275
|
-
{
|
|
373
|
+
for (Index k = 0; k < size; ++k) {
|
|
276
374
|
Index remainingRows = rows - k;
|
|
277
375
|
Index remainingCols = cols - k - 1;
|
|
278
376
|
|
|
279
377
|
RealScalar beta;
|
|
280
378
|
mat.col(k).tail(remainingRows).makeHouseholderInPlace(hCoeffs.coeffRef(k), beta);
|
|
281
|
-
mat.coeffRef(k,k) = beta;
|
|
379
|
+
mat.coeffRef(k, k) = beta;
|
|
282
380
|
|
|
283
381
|
// apply H to remaining part of m_qr from the left
|
|
284
382
|
mat.bottomRightCorner(remainingRows, remainingCols)
|
|
285
|
-
.applyHouseholderOnTheLeft(mat.col(k).tail(remainingRows-1), hCoeffs.coeffRef(k), tempData+k+1);
|
|
383
|
+
.applyHouseholderOnTheLeft(mat.col(k).tail(remainingRows - 1), hCoeffs.coeffRef(k), tempData + k + 1);
|
|
286
384
|
}
|
|
287
385
|
}
|
|
288
386
|
|
|
387
|
+
// TODO: add a corresponding public API for updating a QR factorization
|
|
388
|
+
/** \internal
|
|
389
|
+
* Basically a modified copy of @c Eigen::internal::householder_qr_inplace_unblocked that
|
|
390
|
+
* performs a rank-1 update of the QR matrix in compact storage. This function assumes, that
|
|
391
|
+
* the first @c k-1 columns of the matrix @c mat contain the QR decomposition of \f$A^N\f$ up to
|
|
392
|
+
* column k-1. Then the QR decomposition of the k-th column (given by @c newColumn) is computed by
|
|
393
|
+
* applying the k-1 Householder projectors on it and finally compute the projector \f$H_k\f$ of
|
|
394
|
+
* it. On exit the matrix @c mat and the vector @c hCoeffs contain the QR decomposition of the
|
|
395
|
+
* first k columns of \f$A^N\f$. The \a tempData argument must point to at least mat.cols() scalars. */
|
|
396
|
+
template <typename MatrixQR, typename HCoeffs, typename VectorQR>
|
|
397
|
+
void householder_qr_inplace_update(MatrixQR& mat, HCoeffs& hCoeffs, const VectorQR& newColumn,
|
|
398
|
+
typename MatrixQR::Index k, typename MatrixQR::Scalar* tempData) {
|
|
399
|
+
typedef typename MatrixQR::Index Index;
|
|
400
|
+
typedef typename MatrixQR::RealScalar RealScalar;
|
|
401
|
+
Index rows = mat.rows();
|
|
402
|
+
|
|
403
|
+
eigen_assert(k < mat.cols());
|
|
404
|
+
eigen_assert(k < rows);
|
|
405
|
+
eigen_assert(hCoeffs.size() == mat.cols());
|
|
406
|
+
eigen_assert(newColumn.size() == rows);
|
|
407
|
+
eigen_assert(tempData);
|
|
408
|
+
|
|
409
|
+
// Store new column in mat at column k
|
|
410
|
+
mat.col(k) = newColumn;
|
|
411
|
+
// Apply H = H_1...H_{k-1} on newColumn (skip if k=0)
|
|
412
|
+
for (Index i = 0; i < k; ++i) {
|
|
413
|
+
Index remainingRows = rows - i;
|
|
414
|
+
mat.col(k)
|
|
415
|
+
.tail(remainingRows)
|
|
416
|
+
.applyHouseholderOnTheLeft(mat.col(i).tail(remainingRows - 1), hCoeffs.coeffRef(i), tempData + i + 1);
|
|
417
|
+
}
|
|
418
|
+
// Construct Householder projector in-place in column k
|
|
419
|
+
RealScalar beta;
|
|
420
|
+
mat.col(k).tail(rows - k).makeHouseholderInPlace(hCoeffs.coeffRef(k), beta);
|
|
421
|
+
mat.coeffRef(k, k) = beta;
|
|
422
|
+
}
|
|
423
|
+
|
|
289
424
|
/** \internal */
|
|
290
|
-
template<typename MatrixQR, typename HCoeffs,
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
{
|
|
295
|
-
// This is specialized for MKL-supported Scalar types in HouseholderQR_MKL.h
|
|
296
|
-
static void run(MatrixQR& mat, HCoeffs& hCoeffs, Index maxBlockSize=32,
|
|
297
|
-
typename MatrixQR::Scalar* tempData = 0)
|
|
298
|
-
{
|
|
425
|
+
template <typename MatrixQR, typename HCoeffs, typename MatrixQRScalar = typename MatrixQR::Scalar,
|
|
426
|
+
bool InnerStrideIsOne = (MatrixQR::InnerStrideAtCompileTime == 1 && HCoeffs::InnerStrideAtCompileTime == 1)>
|
|
427
|
+
struct householder_qr_inplace_blocked {
|
|
428
|
+
// This is specialized for LAPACK-supported Scalar types in HouseholderQR_LAPACKE.h
|
|
429
|
+
static void run(MatrixQR& mat, HCoeffs& hCoeffs, Index maxBlockSize = 32, typename MatrixQR::Scalar* tempData = 0) {
|
|
299
430
|
typedef typename MatrixQR::Scalar Scalar;
|
|
300
|
-
typedef Block<MatrixQR,Dynamic,Dynamic> BlockType;
|
|
431
|
+
typedef Block<MatrixQR, Dynamic, Dynamic> BlockType;
|
|
301
432
|
|
|
302
433
|
Index rows = mat.rows();
|
|
303
434
|
Index cols = mat.cols();
|
|
304
435
|
Index size = (std::min)(rows, cols);
|
|
305
436
|
|
|
306
|
-
typedef Matrix<Scalar,Dynamic,1,ColMajor,MatrixQR::MaxColsAtCompileTime,1> TempType;
|
|
437
|
+
typedef Matrix<Scalar, Dynamic, 1, ColMajor, MatrixQR::MaxColsAtCompileTime, 1> TempType;
|
|
307
438
|
TempType tempVector;
|
|
308
|
-
if(tempData==0)
|
|
309
|
-
{
|
|
439
|
+
if (tempData == 0) {
|
|
310
440
|
tempVector.resize(cols);
|
|
311
441
|
tempData = tempVector.data();
|
|
312
442
|
}
|
|
313
443
|
|
|
314
|
-
Index blockSize = (std::min)(maxBlockSize,size);
|
|
444
|
+
Index blockSize = (std::min)(maxBlockSize, size);
|
|
315
445
|
|
|
316
446
|
Index k = 0;
|
|
317
|
-
for (k = 0; k < size; k += blockSize)
|
|
318
|
-
|
|
319
|
-
Index
|
|
320
|
-
Index
|
|
321
|
-
Index brows = rows-k; // rows of the block
|
|
447
|
+
for (k = 0; k < size; k += blockSize) {
|
|
448
|
+
Index bs = (std::min)(size - k, blockSize); // actual size of the block
|
|
449
|
+
Index tcols = cols - k - bs; // trailing columns
|
|
450
|
+
Index brows = rows - k; // rows of the block
|
|
322
451
|
|
|
323
452
|
// partition the matrix:
|
|
324
453
|
// A00 | A01 | A02
|
|
@@ -328,61 +457,68 @@ struct householder_qr_inplace_blocked
|
|
|
328
457
|
// and update [A21^T A22^T]^T using level 3 operations.
|
|
329
458
|
// Finally, the algorithm continue on A22
|
|
330
459
|
|
|
331
|
-
BlockType A11_21 = mat.block(k,k,brows,bs);
|
|
332
|
-
Block<HCoeffs,Dynamic,1> hCoeffsSegment = hCoeffs.segment(k,bs);
|
|
460
|
+
BlockType A11_21 = mat.block(k, k, brows, bs);
|
|
461
|
+
Block<HCoeffs, Dynamic, 1> hCoeffsSegment = hCoeffs.segment(k, bs);
|
|
333
462
|
|
|
334
463
|
householder_qr_inplace_unblocked(A11_21, hCoeffsSegment, tempData);
|
|
335
464
|
|
|
336
|
-
if(tcols)
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
apply_block_householder_on_the_left(A21_22,A11_21,hCoeffsSegment, false); // false == backward
|
|
465
|
+
if (tcols) {
|
|
466
|
+
BlockType A21_22 = mat.block(k, k + bs, brows, tcols);
|
|
467
|
+
apply_block_householder_on_the_left(A21_22, A11_21, hCoeffsSegment, false); // false == backward
|
|
340
468
|
}
|
|
341
469
|
}
|
|
342
470
|
}
|
|
343
471
|
};
|
|
344
472
|
|
|
345
|
-
}
|
|
473
|
+
} // end namespace internal
|
|
346
474
|
|
|
347
475
|
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
348
|
-
template<typename
|
|
349
|
-
template<typename RhsType, typename DstType>
|
|
350
|
-
void HouseholderQR<
|
|
351
|
-
{
|
|
476
|
+
template <typename MatrixType_>
|
|
477
|
+
template <typename RhsType, typename DstType>
|
|
478
|
+
void HouseholderQR<MatrixType_>::_solve_impl(const RhsType& rhs, DstType& dst) const {
|
|
352
479
|
const Index rank = (std::min)(rows(), cols());
|
|
353
|
-
eigen_assert(rhs.rows() == rows());
|
|
354
480
|
|
|
355
481
|
typename RhsType::PlainObject c(rhs);
|
|
356
482
|
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
);
|
|
483
|
+
c.applyOnTheLeft(householderQ().setLength(rank).adjoint());
|
|
484
|
+
|
|
485
|
+
m_qr.topLeftCorner(rank, rank).template triangularView<Upper>().solveInPlace(c.topRows(rank));
|
|
486
|
+
|
|
487
|
+
dst.topRows(rank) = c.topRows(rank);
|
|
488
|
+
dst.bottomRows(cols() - rank).setZero();
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
template <typename MatrixType_>
|
|
492
|
+
template <bool Conjugate, typename RhsType, typename DstType>
|
|
493
|
+
void HouseholderQR<MatrixType_>::_solve_impl_transposed(const RhsType& rhs, DstType& dst) const {
|
|
494
|
+
const Index rank = (std::min)(rows(), cols());
|
|
495
|
+
|
|
496
|
+
typename RhsType::PlainObject c(rhs);
|
|
362
497
|
|
|
363
498
|
m_qr.topLeftCorner(rank, rank)
|
|
364
499
|
.template triangularView<Upper>()
|
|
500
|
+
.transpose()
|
|
501
|
+
.template conjugateIf<Conjugate>()
|
|
365
502
|
.solveInPlace(c.topRows(rank));
|
|
366
503
|
|
|
367
504
|
dst.topRows(rank) = c.topRows(rank);
|
|
368
|
-
dst.bottomRows(
|
|
505
|
+
dst.bottomRows(rows() - rank).setZero();
|
|
506
|
+
|
|
507
|
+
dst.applyOnTheLeft(householderQ().setLength(rank).template conjugateIf<!Conjugate>());
|
|
369
508
|
}
|
|
370
509
|
#endif
|
|
371
510
|
|
|
372
511
|
/** Performs the QR factorization of the given matrix \a matrix. The result of
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
template<typename MatrixType>
|
|
379
|
-
void HouseholderQR<MatrixType>::computeInPlace()
|
|
380
|
-
{
|
|
381
|
-
check_template_parameters();
|
|
382
|
-
|
|
512
|
+
* the factorization is stored into \c *this, and a reference to \c *this
|
|
513
|
+
* is returned.
|
|
514
|
+
*
|
|
515
|
+
* \sa class HouseholderQR, HouseholderQR(const MatrixType&)
|
|
516
|
+
*/
|
|
517
|
+
template <typename MatrixType>
|
|
518
|
+
void HouseholderQR<MatrixType>::computeInPlace() {
|
|
383
519
|
Index rows = m_qr.rows();
|
|
384
520
|
Index cols = m_qr.cols();
|
|
385
|
-
Index size = (std::min)(rows,cols);
|
|
521
|
+
Index size = (std::min)(rows, cols);
|
|
386
522
|
|
|
387
523
|
m_hCoeffs.resize(size);
|
|
388
524
|
|
|
@@ -394,16 +530,14 @@ void HouseholderQR<MatrixType>::computeInPlace()
|
|
|
394
530
|
}
|
|
395
531
|
|
|
396
532
|
/** \return the Householder QR decomposition of \c *this.
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
template<typename Derived>
|
|
401
|
-
const HouseholderQR<typename MatrixBase<Derived>::PlainObject>
|
|
402
|
-
MatrixBase<Derived>::householderQr() const
|
|
403
|
-
{
|
|
533
|
+
*
|
|
534
|
+
* \sa class HouseholderQR
|
|
535
|
+
*/
|
|
536
|
+
template <typename Derived>
|
|
537
|
+
const HouseholderQR<typename MatrixBase<Derived>::PlainObject> MatrixBase<Derived>::householderQr() const {
|
|
404
538
|
return HouseholderQR<PlainObject>(eval());
|
|
405
539
|
}
|
|
406
540
|
|
|
407
|
-
}
|
|
541
|
+
} // end namespace Eigen
|
|
408
542
|
|
|
409
|
-
#endif
|
|
543
|
+
#endif // EIGEN_QR_H
|