@smake/eigen 1.1.0 → 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 -20
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +187 -120
- package/eigen/Eigen/Eigenvalues +16 -13
- package/eigen/Eigen/Geometry +18 -18
- package/eigen/Eigen/Householder +9 -7
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -13
- package/eigen/Eigen/KLUSupport +23 -21
- package/eigen/Eigen/LU +15 -16
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -51
- package/eigen/Eigen/PaStiXSupport +23 -21
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -20
- package/eigen/Eigen/QtAlignedMalloc +5 -12
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -17
- package/eigen/Eigen/Sparse +1 -2
- package/eigen/Eigen/SparseCholesky +18 -15
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +9 -9
- 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 +366 -405
- package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
- package/eigen/Eigen/src/Core/Array.h +329 -370
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
- package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
- package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
- package/eigen/Eigen/src/Core/Block.h +371 -390
- package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
- package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
- package/eigen/Eigen/src/Core/DenseBase.h +630 -658
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
- package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +168 -207
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +167 -217
- package/eigen/Eigen/src/Core/EigenBase.h +74 -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 -113
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
- package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
- package/eigen/Eigen/src/Core/IO.h +131 -156
- package/eigen/Eigen/src/Core/IndexedView.h +209 -125
- 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 +50 -59
- package/eigen/Eigen/src/Core/Map.h +123 -141
- package/eigen/Eigen/src/Core/MapBase.h +255 -282
- package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
- package/eigen/Eigen/src/Core/Matrix.h +463 -494
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
- package/eigen/Eigen/src/Core/NestByValue.h +58 -52
- package/eigen/Eigen/src/Core/NoAlias.h +79 -86
- package/eigen/Eigen/src/Core/NumTraits.h +206 -206
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
- package/eigen/Eigen/src/Core/Product.h +246 -130
- package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
- package/eigen/Eigen/src/Core/Random.h +153 -164
- 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 +334 -314
- package/eigen/Eigen/src/Core/Ref.h +259 -257
- package/eigen/Eigen/src/Core/Replicate.h +92 -104
- package/eigen/Eigen/src/Core/Reshaped.h +215 -271
- package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
- package/eigen/Eigen/src/Core/Reverse.h +133 -148
- package/eigen/Eigen/src/Core/Select.h +68 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
- 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 +88 -102
- package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
- package/eigen/Eigen/src/Core/SolverBase.h +132 -133
- package/eigen/Eigen/src/Core/StableNorm.h +113 -147
- package/eigen/Eigen/src/Core/StlIterators.h +404 -248
- package/eigen/Eigen/src/Core/Stride.h +90 -92
- package/eigen/Eigen/src/Core/Swap.h +70 -39
- package/eigen/Eigen/src/Core/Transpose.h +258 -295
- package/eigen/Eigen/src/Core/Transpositions.h +270 -333
- package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
- package/eigen/Eigen/src/Core/Visitor.h +464 -308
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
- 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 +229 -41
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
- 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 +2380 -1362
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
- package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
- 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 +54 -82
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
- 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 -47
- 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 -277
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
- package/eigen/Eigen/src/Core/util/Constants.h +297 -262
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
- 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 +417 -116
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
- package/eigen/Eigen/src/Core/util/Macros.h +655 -773
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +970 -748
- package/eigen/Eigen/src/Core/util/Meta.h +581 -633
- 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 +17 -17
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
- package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
- 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 +89 -105
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
- package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
- package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
- package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
- package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
- package/eigen/Eigen/src/Geometry/Transform.h +858 -936
- package/eigen/Eigen/src/Geometry/Translation.h +94 -92
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
- package/eigen/Eigen/src/Householder/Householder.h +102 -124
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
- package/eigen/Eigen/src/LU/Determinant.h +50 -69
- package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
- package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
- 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 +243 -265
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
- 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 -430
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
- package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
- 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 +244 -264
- package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
- 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 +577 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
- 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 +1603 -1245
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
- 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 +370 -416
- 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 +138 -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 +756 -710
- 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 +245 -301
- 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 +89 -100
- 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 +124 -132
- 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 +450 -502
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
- 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 -730
- 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 +428 -464
- 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 +9972 -16179
- 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.h → BlockMethods.inc} +434 -506
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
- 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/package.json +1 -1
- package/eigen/COPYING.APACHE +0 -203
- package/eigen/COPYING.BSD +0 -26
- package/eigen/COPYING.GPL +0 -674
- package/eigen/COPYING.LGPL +0 -502
- package/eigen/COPYING.MINPACK +0 -51
- package/eigen/COPYING.MPL2 +0 -373
- package/eigen/COPYING.README +0 -18
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- 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 -358
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
- package/eigen/README.md +0 -5
|
@@ -12,324 +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 {
|
|
16
19
|
|
|
17
20
|
namespace internal {
|
|
18
|
-
template<typename
|
|
19
|
-
: traits<
|
|
20
|
-
{
|
|
21
|
+
template <typename MatrixType_>
|
|
22
|
+
struct traits<HouseholderQR<MatrixType_>> : traits<MatrixType_> {
|
|
21
23
|
typedef MatrixXpr XprKind;
|
|
22
24
|
typedef SolverStorage StorageKind;
|
|
23
25
|
typedef int StorageIndex;
|
|
24
26
|
enum { Flags = 0 };
|
|
25
27
|
};
|
|
26
28
|
|
|
27
|
-
}
|
|
29
|
+
} // end namespace internal
|
|
28
30
|
|
|
29
31
|
/** \ingroup QR_Module
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
template<typename
|
|
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
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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)
|
|
109
120
|
: m_qr(matrix.rows(), matrix.cols()),
|
|
110
|
-
m_hCoeffs((std::min)(matrix.rows(),matrix.cols())),
|
|
121
|
+
m_hCoeffs((std::min)(matrix.rows(), matrix.cols())),
|
|
111
122
|
m_temp(matrix.cols()),
|
|
112
|
-
m_isInitialized(false)
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
}
|
|
116
|
-
|
|
123
|
+
m_isInitialized(false) {
|
|
124
|
+
compute(matrix.derived());
|
|
125
|
+
}
|
|
117
126
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
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)
|
|
127
136
|
: m_qr(matrix.derived()),
|
|
128
|
-
m_hCoeffs((std::min)(matrix.rows(),matrix.cols())),
|
|
137
|
+
m_hCoeffs((std::min)(matrix.rows(), matrix.cols())),
|
|
129
138
|
m_temp(matrix.cols()),
|
|
130
|
-
m_isInitialized(false)
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
}
|
|
139
|
+
m_isInitialized(false) {
|
|
140
|
+
computeInPlace();
|
|
141
|
+
}
|
|
134
142
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
#endif
|
|
154
|
-
|
|
155
|
-
/** This method returns an expression of the unitary matrix Q as a sequence of Householder transformations.
|
|
156
|
-
*
|
|
157
|
-
* The returned expression can directly be used to perform matrix products. It can also be assigned to a dense Matrix object.
|
|
158
|
-
* Here is an example showing how to recover the full or thin matrix Q, as well as how to perform matrix products using operator*:
|
|
159
|
-
*
|
|
160
|
-
* Example: \include HouseholderQR_householderQ.cpp
|
|
161
|
-
* Output: \verbinclude HouseholderQR_householderQ.out
|
|
162
|
-
*/
|
|
163
|
-
HouseholderSequenceType householderQ() const
|
|
164
|
-
{
|
|
165
|
-
eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
|
|
166
|
-
return HouseholderSequenceType(m_qr, m_hCoeffs.conjugate());
|
|
167
|
-
}
|
|
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
|
|
168
161
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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
|
+
}
|
|
175
|
+
|
|
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
|
+
}
|
|
183
|
+
|
|
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
|
+
};
|
|
177
286
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
287
|
+
namespace internal {
|
|
288
|
+
|
|
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);
|
|
183
300
|
}
|
|
301
|
+
}
|
|
302
|
+
};
|
|
184
303
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
* One way to work around that is to use logAbsDeterminant() instead.
|
|
195
|
-
*
|
|
196
|
-
* \sa logAbsDeterminant(), MatrixBase::determinant()
|
|
197
|
-
*/
|
|
198
|
-
typename MatrixType::RealScalar absDeterminant() const;
|
|
199
|
-
|
|
200
|
-
/** \returns the natural log of the absolute value of the determinant of the matrix of which
|
|
201
|
-
* *this is the QR decomposition. It has only linear complexity
|
|
202
|
-
* (that is, O(n) where n is the dimension of the square matrix)
|
|
203
|
-
* as the QR decomposition has already been computed.
|
|
204
|
-
*
|
|
205
|
-
* \note This is only for square matrices.
|
|
206
|
-
*
|
|
207
|
-
* \note This method is useful to work around the risk of overflow/underflow that's inherent
|
|
208
|
-
* to determinant computation.
|
|
209
|
-
*
|
|
210
|
-
* \sa absDeterminant(), MatrixBase::determinant()
|
|
211
|
-
*/
|
|
212
|
-
typename MatrixType::RealScalar logAbsDeterminant() const;
|
|
213
|
-
|
|
214
|
-
inline Index rows() const { return m_qr.rows(); }
|
|
215
|
-
inline Index cols() const { return m_qr.cols(); }
|
|
216
|
-
|
|
217
|
-
/** \returns a const reference to the vector of Householder coefficients used to represent the factor \c Q.
|
|
218
|
-
*
|
|
219
|
-
* For advanced uses only.
|
|
220
|
-
*/
|
|
221
|
-
const HCoeffsType& hCoeffs() const { return m_hCoeffs; }
|
|
222
|
-
|
|
223
|
-
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
224
|
-
template<typename RhsType, typename DstType>
|
|
225
|
-
void _solve_impl(const RhsType &rhs, DstType &dst) const;
|
|
226
|
-
|
|
227
|
-
template<bool Conjugate, typename RhsType, typename DstType>
|
|
228
|
-
void _solve_impl_transposed(const RhsType &rhs, DstType &dst) const;
|
|
229
|
-
#endif
|
|
230
|
-
|
|
231
|
-
protected:
|
|
232
|
-
|
|
233
|
-
static void check_template_parameters()
|
|
234
|
-
{
|
|
235
|
-
EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
|
|
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;
|
|
236
313
|
}
|
|
314
|
+
out_det = negated ? Scalar(-1) : Scalar(1);
|
|
315
|
+
}
|
|
316
|
+
};
|
|
237
317
|
|
|
238
|
-
|
|
318
|
+
} // end namespace internal
|
|
239
319
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
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
|
+
}
|
|
245
328
|
|
|
246
|
-
template<typename MatrixType>
|
|
247
|
-
typename MatrixType::RealScalar HouseholderQR<MatrixType>::absDeterminant() const
|
|
248
|
-
{
|
|
329
|
+
template <typename MatrixType>
|
|
330
|
+
typename MatrixType::RealScalar HouseholderQR<MatrixType>::absDeterminant() const {
|
|
249
331
|
using std::abs;
|
|
250
332
|
eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
|
|
251
333
|
eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
|
|
252
334
|
return abs(m_qr.diagonal().prod());
|
|
253
335
|
}
|
|
254
336
|
|
|
255
|
-
template<typename MatrixType>
|
|
256
|
-
typename MatrixType::RealScalar HouseholderQR<MatrixType>::logAbsDeterminant() const
|
|
257
|
-
{
|
|
337
|
+
template <typename MatrixType>
|
|
338
|
+
typename MatrixType::RealScalar HouseholderQR<MatrixType>::logAbsDeterminant() const {
|
|
258
339
|
eigen_assert(m_isInitialized && "HouseholderQR is not initialized.");
|
|
259
340
|
eigen_assert(m_qr.rows() == m_qr.cols() && "You can't take the determinant of a non-square matrix!");
|
|
260
341
|
return m_qr.diagonal().cwiseAbs().array().log().sum();
|
|
261
342
|
}
|
|
262
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
|
+
|
|
263
353
|
namespace internal {
|
|
264
354
|
|
|
265
355
|
/** \internal */
|
|
266
|
-
template<typename MatrixQR, typename HCoeffs>
|
|
267
|
-
void householder_qr_inplace_unblocked(MatrixQR& mat, HCoeffs& hCoeffs, typename MatrixQR::Scalar* tempData = 0)
|
|
268
|
-
{
|
|
356
|
+
template <typename MatrixQR, typename HCoeffs>
|
|
357
|
+
void householder_qr_inplace_unblocked(MatrixQR& mat, HCoeffs& hCoeffs, typename MatrixQR::Scalar* tempData = 0) {
|
|
269
358
|
typedef typename MatrixQR::Scalar Scalar;
|
|
270
359
|
typedef typename MatrixQR::RealScalar RealScalar;
|
|
271
360
|
Index rows = mat.rows();
|
|
272
361
|
Index cols = mat.cols();
|
|
273
|
-
Index size = (std::min)(rows,cols);
|
|
362
|
+
Index size = (std::min)(rows, cols);
|
|
274
363
|
|
|
275
364
|
eigen_assert(hCoeffs.size() == size);
|
|
276
365
|
|
|
277
|
-
typedef Matrix<Scalar,MatrixQR::ColsAtCompileTime,1> TempType;
|
|
366
|
+
typedef Matrix<Scalar, MatrixQR::ColsAtCompileTime, 1> TempType;
|
|
278
367
|
TempType tempVector;
|
|
279
|
-
if(tempData==0)
|
|
280
|
-
{
|
|
368
|
+
if (tempData == 0) {
|
|
281
369
|
tempVector.resize(cols);
|
|
282
370
|
tempData = tempVector.data();
|
|
283
371
|
}
|
|
284
372
|
|
|
285
|
-
for(Index k = 0; k < size; ++k)
|
|
286
|
-
{
|
|
373
|
+
for (Index k = 0; k < size; ++k) {
|
|
287
374
|
Index remainingRows = rows - k;
|
|
288
375
|
Index remainingCols = cols - k - 1;
|
|
289
376
|
|
|
290
377
|
RealScalar beta;
|
|
291
378
|
mat.col(k).tail(remainingRows).makeHouseholderInPlace(hCoeffs.coeffRef(k), beta);
|
|
292
|
-
mat.coeffRef(k,k) = beta;
|
|
379
|
+
mat.coeffRef(k, k) = beta;
|
|
293
380
|
|
|
294
381
|
// apply H to remaining part of m_qr from the left
|
|
295
382
|
mat.bottomRightCorner(remainingRows, remainingCols)
|
|
296
|
-
.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);
|
|
384
|
+
}
|
|
385
|
+
}
|
|
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);
|
|
297
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;
|
|
298
422
|
}
|
|
299
423
|
|
|
300
424
|
/** \internal */
|
|
301
|
-
template<typename MatrixQR, typename HCoeffs,
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
struct householder_qr_inplace_blocked
|
|
305
|
-
{
|
|
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 {
|
|
306
428
|
// This is specialized for LAPACK-supported Scalar types in HouseholderQR_LAPACKE.h
|
|
307
|
-
static void run(MatrixQR& mat, HCoeffs& hCoeffs, Index maxBlockSize=32,
|
|
308
|
-
typename MatrixQR::Scalar* tempData = 0)
|
|
309
|
-
{
|
|
429
|
+
static void run(MatrixQR& mat, HCoeffs& hCoeffs, Index maxBlockSize = 32, typename MatrixQR::Scalar* tempData = 0) {
|
|
310
430
|
typedef typename MatrixQR::Scalar Scalar;
|
|
311
|
-
typedef Block<MatrixQR,Dynamic,Dynamic> BlockType;
|
|
431
|
+
typedef Block<MatrixQR, Dynamic, Dynamic> BlockType;
|
|
312
432
|
|
|
313
433
|
Index rows = mat.rows();
|
|
314
434
|
Index cols = mat.cols();
|
|
315
435
|
Index size = (std::min)(rows, cols);
|
|
316
436
|
|
|
317
|
-
typedef Matrix<Scalar,Dynamic,1,ColMajor,MatrixQR::MaxColsAtCompileTime,1> TempType;
|
|
437
|
+
typedef Matrix<Scalar, Dynamic, 1, ColMajor, MatrixQR::MaxColsAtCompileTime, 1> TempType;
|
|
318
438
|
TempType tempVector;
|
|
319
|
-
if(tempData==0)
|
|
320
|
-
{
|
|
439
|
+
if (tempData == 0) {
|
|
321
440
|
tempVector.resize(cols);
|
|
322
441
|
tempData = tempVector.data();
|
|
323
442
|
}
|
|
324
443
|
|
|
325
|
-
Index blockSize = (std::min)(maxBlockSize,size);
|
|
444
|
+
Index blockSize = (std::min)(maxBlockSize, size);
|
|
326
445
|
|
|
327
446
|
Index k = 0;
|
|
328
|
-
for (k = 0; k < size; k += blockSize)
|
|
329
|
-
|
|
330
|
-
Index
|
|
331
|
-
Index
|
|
332
|
-
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
|
|
333
451
|
|
|
334
452
|
// partition the matrix:
|
|
335
453
|
// A00 | A01 | A02
|
|
@@ -339,75 +457,68 @@ struct householder_qr_inplace_blocked
|
|
|
339
457
|
// and update [A21^T A22^T]^T using level 3 operations.
|
|
340
458
|
// Finally, the algorithm continue on A22
|
|
341
459
|
|
|
342
|
-
BlockType A11_21 = mat.block(k,k,brows,bs);
|
|
343
|
-
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);
|
|
344
462
|
|
|
345
463
|
householder_qr_inplace_unblocked(A11_21, hCoeffsSegment, tempData);
|
|
346
464
|
|
|
347
|
-
if(tcols)
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
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
|
|
351
468
|
}
|
|
352
469
|
}
|
|
353
470
|
}
|
|
354
471
|
};
|
|
355
472
|
|
|
356
|
-
}
|
|
473
|
+
} // end namespace internal
|
|
357
474
|
|
|
358
475
|
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
359
|
-
template<typename
|
|
360
|
-
template<typename RhsType, typename DstType>
|
|
361
|
-
void HouseholderQR<
|
|
362
|
-
{
|
|
476
|
+
template <typename MatrixType_>
|
|
477
|
+
template <typename RhsType, typename DstType>
|
|
478
|
+
void HouseholderQR<MatrixType_>::_solve_impl(const RhsType& rhs, DstType& dst) const {
|
|
363
479
|
const Index rank = (std::min)(rows(), cols());
|
|
364
480
|
|
|
365
481
|
typename RhsType::PlainObject c(rhs);
|
|
366
482
|
|
|
367
|
-
c.applyOnTheLeft(householderQ().setLength(rank).adjoint()
|
|
483
|
+
c.applyOnTheLeft(householderQ().setLength(rank).adjoint());
|
|
368
484
|
|
|
369
|
-
m_qr.topLeftCorner(rank, rank)
|
|
370
|
-
.template triangularView<Upper>()
|
|
371
|
-
.solveInPlace(c.topRows(rank));
|
|
485
|
+
m_qr.topLeftCorner(rank, rank).template triangularView<Upper>().solveInPlace(c.topRows(rank));
|
|
372
486
|
|
|
373
487
|
dst.topRows(rank) = c.topRows(rank);
|
|
374
|
-
dst.bottomRows(cols()-rank).setZero();
|
|
488
|
+
dst.bottomRows(cols() - rank).setZero();
|
|
375
489
|
}
|
|
376
490
|
|
|
377
|
-
template<typename
|
|
378
|
-
template<bool Conjugate, typename RhsType, typename DstType>
|
|
379
|
-
void HouseholderQR<
|
|
380
|
-
{
|
|
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 {
|
|
381
494
|
const Index rank = (std::min)(rows(), cols());
|
|
382
495
|
|
|
383
496
|
typename RhsType::PlainObject c(rhs);
|
|
384
497
|
|
|
385
498
|
m_qr.topLeftCorner(rank, rank)
|
|
386
499
|
.template triangularView<Upper>()
|
|
387
|
-
.transpose()
|
|
500
|
+
.transpose()
|
|
501
|
+
.template conjugateIf<Conjugate>()
|
|
388
502
|
.solveInPlace(c.topRows(rank));
|
|
389
503
|
|
|
390
504
|
dst.topRows(rank) = c.topRows(rank);
|
|
391
|
-
dst.bottomRows(rows()-rank).setZero();
|
|
505
|
+
dst.bottomRows(rows() - rank).setZero();
|
|
392
506
|
|
|
393
|
-
dst.applyOnTheLeft(householderQ().setLength(rank).template conjugateIf<!Conjugate>()
|
|
507
|
+
dst.applyOnTheLeft(householderQ().setLength(rank).template conjugateIf<!Conjugate>());
|
|
394
508
|
}
|
|
395
509
|
#endif
|
|
396
510
|
|
|
397
511
|
/** Performs the QR factorization of the given matrix \a matrix. The result of
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
template<typename MatrixType>
|
|
404
|
-
void HouseholderQR<MatrixType>::computeInPlace()
|
|
405
|
-
{
|
|
406
|
-
check_template_parameters();
|
|
407
|
-
|
|
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() {
|
|
408
519
|
Index rows = m_qr.rows();
|
|
409
520
|
Index cols = m_qr.cols();
|
|
410
|
-
Index size = (std::min)(rows,cols);
|
|
521
|
+
Index size = (std::min)(rows, cols);
|
|
411
522
|
|
|
412
523
|
m_hCoeffs.resize(size);
|
|
413
524
|
|
|
@@ -419,16 +530,14 @@ void HouseholderQR<MatrixType>::computeInPlace()
|
|
|
419
530
|
}
|
|
420
531
|
|
|
421
532
|
/** \return the Householder QR decomposition of \c *this.
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
template<typename Derived>
|
|
426
|
-
const HouseholderQR<typename MatrixBase<Derived>::PlainObject>
|
|
427
|
-
MatrixBase<Derived>::householderQr() const
|
|
428
|
-
{
|
|
533
|
+
*
|
|
534
|
+
* \sa class HouseholderQR
|
|
535
|
+
*/
|
|
536
|
+
template <typename Derived>
|
|
537
|
+
const HouseholderQR<typename MatrixBase<Derived>::PlainObject> MatrixBase<Derived>::householderQr() const {
|
|
429
538
|
return HouseholderQR<PlainObject>(eval());
|
|
430
539
|
}
|
|
431
540
|
|
|
432
|
-
}
|
|
541
|
+
} // end namespace Eigen
|
|
433
542
|
|
|
434
|
-
#endif
|
|
543
|
+
#endif // EIGEN_QR_H
|