@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
|
@@ -10,446 +10,410 @@
|
|
|
10
10
|
#ifndef EIGEN_LLT_H
|
|
11
11
|
#define EIGEN_LLT_H
|
|
12
12
|
|
|
13
|
+
// IWYU pragma: private
|
|
14
|
+
#include "./InternalHeaderCheck.h"
|
|
15
|
+
|
|
13
16
|
namespace Eigen {
|
|
14
17
|
|
|
15
|
-
namespace internal{
|
|
18
|
+
namespace internal {
|
|
16
19
|
|
|
17
|
-
template<typename
|
|
18
|
-
: traits<
|
|
19
|
-
{
|
|
20
|
+
template <typename MatrixType_, int UpLo_>
|
|
21
|
+
struct traits<LLT<MatrixType_, UpLo_> > : traits<MatrixType_> {
|
|
20
22
|
typedef MatrixXpr XprKind;
|
|
21
23
|
typedef SolverStorage StorageKind;
|
|
22
24
|
typedef int StorageIndex;
|
|
23
25
|
enum { Flags = 0 };
|
|
24
26
|
};
|
|
25
27
|
|
|
26
|
-
template<typename MatrixType, int UpLo>
|
|
27
|
-
|
|
28
|
+
template <typename MatrixType, int UpLo>
|
|
29
|
+
struct LLT_Traits;
|
|
30
|
+
} // namespace internal
|
|
28
31
|
|
|
29
32
|
/** \ingroup Cholesky_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
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
template<typename
|
|
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
|
-
explicit LLT(Index size) : m_matrix(size, size),
|
|
102
|
-
m_isInitialized(false) {}
|
|
103
|
-
|
|
104
|
-
template<typename InputType>
|
|
105
|
-
explicit LLT(const EigenBase<InputType>& matrix)
|
|
106
|
-
: m_matrix(matrix.rows(), matrix.cols()),
|
|
107
|
-
m_isInitialized(false)
|
|
108
|
-
{
|
|
109
|
-
compute(matrix.derived());
|
|
110
|
-
}
|
|
33
|
+
*
|
|
34
|
+
* \class LLT
|
|
35
|
+
*
|
|
36
|
+
* \brief Standard Cholesky decomposition (LL^T) of a matrix and associated features
|
|
37
|
+
*
|
|
38
|
+
* \tparam MatrixType_ the type of the matrix of which we are computing the LL^T Cholesky decomposition
|
|
39
|
+
* \tparam UpLo_ the triangular part that will be used for the decomposition: Lower (default) or Upper.
|
|
40
|
+
* The other triangular part won't be read.
|
|
41
|
+
*
|
|
42
|
+
* This class performs a LL^T Cholesky decomposition of a symmetric, positive definite
|
|
43
|
+
* matrix A such that A = LL^* = U^*U, where L is lower triangular.
|
|
44
|
+
*
|
|
45
|
+
* While the Cholesky decomposition is particularly useful to solve selfadjoint problems like D^*D x = b,
|
|
46
|
+
* for that purpose, we recommend the Cholesky decomposition without square root which is more stable
|
|
47
|
+
* and even faster. Nevertheless, this standard Cholesky decomposition remains useful in many other
|
|
48
|
+
* situations like generalised eigen problems with hermitian matrices.
|
|
49
|
+
*
|
|
50
|
+
* Remember that Cholesky decompositions are not rank-revealing. This LLT decomposition is only stable on positive
|
|
51
|
+
* definite matrices, use LDLT instead for the semidefinite case. Also, do not use a Cholesky decomposition to determine
|
|
52
|
+
* whether a system of equations has a solution.
|
|
53
|
+
*
|
|
54
|
+
* Example: \include LLT_example.cpp
|
|
55
|
+
* Output: \verbinclude LLT_example.out
|
|
56
|
+
*
|
|
57
|
+
* \b Performance: for best performance, it is recommended to use a column-major storage format
|
|
58
|
+
* with the Lower triangular part (the default), or, equivalently, a row-major storage format
|
|
59
|
+
* with the Upper triangular part. Otherwise, you might get a 20% slowdown for the full factorization
|
|
60
|
+
* step, and rank-updates can be up to 3 times slower.
|
|
61
|
+
*
|
|
62
|
+
* This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
|
|
63
|
+
*
|
|
64
|
+
* Note that during the decomposition, only the lower (or upper, as defined by UpLo_) triangular part of A is
|
|
65
|
+
* considered. Therefore, the strict lower part does not have to store correct values.
|
|
66
|
+
*
|
|
67
|
+
* \sa MatrixBase::llt(), SelfAdjointView::llt(), class LDLT
|
|
68
|
+
*/
|
|
69
|
+
template <typename MatrixType_, int UpLo_>
|
|
70
|
+
class LLT : public SolverBase<LLT<MatrixType_, UpLo_> > {
|
|
71
|
+
public:
|
|
72
|
+
typedef MatrixType_ MatrixType;
|
|
73
|
+
typedef SolverBase<LLT> Base;
|
|
74
|
+
friend class SolverBase<LLT>;
|
|
75
|
+
|
|
76
|
+
EIGEN_GENERIC_PUBLIC_INTERFACE(LLT)
|
|
77
|
+
enum { MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime };
|
|
78
|
+
|
|
79
|
+
enum { PacketSize = internal::packet_traits<Scalar>::size, AlignmentMask = int(PacketSize) - 1, UpLo = UpLo_ };
|
|
80
|
+
|
|
81
|
+
typedef internal::LLT_Traits<MatrixType, UpLo> Traits;
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* \brief Default Constructor.
|
|
85
|
+
*
|
|
86
|
+
* The default constructor is useful in cases in which the user intends to
|
|
87
|
+
* perform decompositions via LLT::compute(const MatrixType&).
|
|
88
|
+
*/
|
|
89
|
+
LLT() : m_matrix(), m_isInitialized(false) {}
|
|
90
|
+
|
|
91
|
+
/** \brief Default Constructor with memory preallocation
|
|
92
|
+
*
|
|
93
|
+
* Like the default constructor but with preallocation of the internal data
|
|
94
|
+
* according to the specified problem \a size.
|
|
95
|
+
* \sa LLT()
|
|
96
|
+
*/
|
|
97
|
+
explicit LLT(Index size) : m_matrix(size, size), m_isInitialized(false) {}
|
|
98
|
+
|
|
99
|
+
template <typename InputType>
|
|
100
|
+
explicit LLT(const EigenBase<InputType>& matrix) : m_matrix(matrix.rows(), matrix.cols()), m_isInitialized(false) {
|
|
101
|
+
compute(matrix.derived());
|
|
102
|
+
}
|
|
111
103
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
{
|
|
124
|
-
compute(matrix.derived());
|
|
125
|
-
}
|
|
104
|
+
/** \brief Constructs a LLT factorization from a given matrix
|
|
105
|
+
*
|
|
106
|
+
* This overloaded constructor is provided for \link InplaceDecomposition inplace decomposition \endlink when
|
|
107
|
+
* \c MatrixType is a Eigen::Ref.
|
|
108
|
+
*
|
|
109
|
+
* \sa LLT(const EigenBase&)
|
|
110
|
+
*/
|
|
111
|
+
template <typename InputType>
|
|
112
|
+
explicit LLT(EigenBase<InputType>& matrix) : m_matrix(matrix.derived()), m_isInitialized(false) {
|
|
113
|
+
compute(matrix.derived());
|
|
114
|
+
}
|
|
126
115
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
}
|
|
116
|
+
/** \returns a view of the upper triangular matrix U */
|
|
117
|
+
inline typename Traits::MatrixU matrixU() const {
|
|
118
|
+
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
119
|
+
return Traits::getU(m_matrix);
|
|
120
|
+
}
|
|
133
121
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
}
|
|
122
|
+
/** \returns a view of the lower triangular matrix L */
|
|
123
|
+
inline typename Traits::MatrixL matrixL() const {
|
|
124
|
+
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
125
|
+
return Traits::getL(m_matrix);
|
|
126
|
+
}
|
|
140
127
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
#endif
|
|
156
|
-
|
|
157
|
-
template<typename Derived>
|
|
158
|
-
void solveInPlace(const MatrixBase<Derived> &bAndX) const;
|
|
159
|
-
|
|
160
|
-
template<typename InputType>
|
|
161
|
-
LLT& compute(const EigenBase<InputType>& matrix);
|
|
162
|
-
|
|
163
|
-
/** \returns an estimate of the reciprocal condition number of the matrix of
|
|
164
|
-
* which \c *this is the Cholesky decomposition.
|
|
165
|
-
*/
|
|
166
|
-
RealScalar rcond() const
|
|
167
|
-
{
|
|
168
|
-
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
169
|
-
eigen_assert(m_info == Success && "LLT failed because matrix appears to be negative");
|
|
170
|
-
return internal::rcond_estimate_helper(m_l1_norm, *this);
|
|
171
|
-
}
|
|
128
|
+
#ifdef EIGEN_PARSED_BY_DOXYGEN
|
|
129
|
+
/** \returns the solution x of \f$ A x = b \f$ using the current decomposition of A.
|
|
130
|
+
*
|
|
131
|
+
* Since this LLT class assumes anyway that the matrix A is invertible, the solution
|
|
132
|
+
* theoretically exists and is unique regardless of b.
|
|
133
|
+
*
|
|
134
|
+
* Example: \include LLT_solve.cpp
|
|
135
|
+
* Output: \verbinclude LLT_solve.out
|
|
136
|
+
*
|
|
137
|
+
* \sa solveInPlace(), MatrixBase::llt(), SelfAdjointView::llt()
|
|
138
|
+
*/
|
|
139
|
+
template <typename Rhs>
|
|
140
|
+
inline const Solve<LLT, Rhs> solve(const MatrixBase<Rhs>& b) const;
|
|
141
|
+
#endif
|
|
172
142
|
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
* TODO: document the storage layout
|
|
176
|
-
*/
|
|
177
|
-
inline const MatrixType& matrixLLT() const
|
|
178
|
-
{
|
|
179
|
-
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
180
|
-
return m_matrix;
|
|
181
|
-
}
|
|
143
|
+
template <typename Derived>
|
|
144
|
+
void solveInPlace(const MatrixBase<Derived>& bAndX) const;
|
|
182
145
|
|
|
183
|
-
|
|
146
|
+
template <typename InputType>
|
|
147
|
+
LLT& compute(const EigenBase<InputType>& matrix);
|
|
184
148
|
|
|
149
|
+
/** \returns an estimate of the reciprocal condition number of the matrix of
|
|
150
|
+
* which \c *this is the Cholesky decomposition.
|
|
151
|
+
*/
|
|
152
|
+
RealScalar rcond() const {
|
|
153
|
+
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
154
|
+
eigen_assert(m_info == Success && "LLT failed because matrix appears to be negative");
|
|
155
|
+
return internal::rcond_estimate_helper(m_l1_norm, *this);
|
|
156
|
+
}
|
|
185
157
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
return m_info;
|
|
195
|
-
}
|
|
158
|
+
/** \returns the LLT decomposition matrix
|
|
159
|
+
*
|
|
160
|
+
* TODO: document the storage layout
|
|
161
|
+
*/
|
|
162
|
+
inline const MatrixType& matrixLLT() const {
|
|
163
|
+
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
164
|
+
return m_matrix;
|
|
165
|
+
}
|
|
196
166
|
|
|
197
|
-
|
|
198
|
-
*
|
|
199
|
-
* This method is provided for compatibility with other matrix decompositions, thus enabling generic code such as:
|
|
200
|
-
* \code x = decomposition.adjoint().solve(b) \endcode
|
|
201
|
-
*/
|
|
202
|
-
const LLT& adjoint() const EIGEN_NOEXCEPT { return *this; };
|
|
167
|
+
MatrixType reconstructedMatrix() const;
|
|
203
168
|
|
|
204
|
-
|
|
205
|
-
|
|
169
|
+
/** \brief Reports whether previous computation was successful.
|
|
170
|
+
*
|
|
171
|
+
* \returns \c Success if computation was successful,
|
|
172
|
+
* \c NumericalIssue if the matrix.appears not to be positive definite.
|
|
173
|
+
*/
|
|
174
|
+
ComputationInfo info() const {
|
|
175
|
+
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
176
|
+
return m_info;
|
|
177
|
+
}
|
|
206
178
|
|
|
207
|
-
|
|
208
|
-
|
|
179
|
+
/** \returns the adjoint of \c *this, that is, a const reference to the decomposition itself as the underlying matrix
|
|
180
|
+
* is self-adjoint.
|
|
181
|
+
*
|
|
182
|
+
* This method is provided for compatibility with other matrix decompositions, thus enabling generic code such as:
|
|
183
|
+
* \code x = decomposition.adjoint().solve(b) \endcode
|
|
184
|
+
*/
|
|
185
|
+
const LLT& adjoint() const noexcept { return *this; }
|
|
209
186
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
void _solve_impl(const RhsType &rhs, DstType &dst) const;
|
|
187
|
+
constexpr Index rows() const noexcept { return m_matrix.rows(); }
|
|
188
|
+
constexpr Index cols() const noexcept { return m_matrix.cols(); }
|
|
213
189
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
#endif
|
|
190
|
+
template <typename VectorType>
|
|
191
|
+
LLT& rankUpdate(const VectorType& vec, const RealScalar& sigma = 1);
|
|
217
192
|
|
|
218
|
-
|
|
193
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
194
|
+
template <typename RhsType, typename DstType>
|
|
195
|
+
void _solve_impl(const RhsType& rhs, DstType& dst) const;
|
|
219
196
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
}
|
|
197
|
+
template <bool Conjugate, typename RhsType, typename DstType>
|
|
198
|
+
void _solve_impl_transposed(const RhsType& rhs, DstType& dst) const;
|
|
199
|
+
#endif
|
|
224
200
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
201
|
+
protected:
|
|
202
|
+
EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar)
|
|
203
|
+
|
|
204
|
+
/** \internal
|
|
205
|
+
* Used to compute and store L
|
|
206
|
+
* The strict upper part is not used and even not initialized.
|
|
207
|
+
*/
|
|
208
|
+
MatrixType m_matrix;
|
|
209
|
+
RealScalar m_l1_norm;
|
|
210
|
+
bool m_isInitialized;
|
|
211
|
+
ComputationInfo m_info;
|
|
233
212
|
};
|
|
234
213
|
|
|
235
214
|
namespace internal {
|
|
236
215
|
|
|
237
|
-
template<typename Scalar, int UpLo>
|
|
216
|
+
template <typename Scalar, int UpLo>
|
|
217
|
+
struct llt_inplace;
|
|
238
218
|
|
|
239
|
-
template<typename MatrixType, typename VectorType>
|
|
240
|
-
static Index llt_rank_update_lower(MatrixType& mat, const VectorType& vec,
|
|
241
|
-
{
|
|
219
|
+
template <typename MatrixType, typename VectorType>
|
|
220
|
+
static Index llt_rank_update_lower(MatrixType& mat, const VectorType& vec,
|
|
221
|
+
const typename MatrixType::RealScalar& sigma) {
|
|
242
222
|
using std::sqrt;
|
|
243
223
|
typedef typename MatrixType::Scalar Scalar;
|
|
244
224
|
typedef typename MatrixType::RealScalar RealScalar;
|
|
245
225
|
typedef typename MatrixType::ColXpr ColXpr;
|
|
246
|
-
typedef
|
|
226
|
+
typedef internal::remove_all_t<ColXpr> ColXprCleaned;
|
|
247
227
|
typedef typename ColXprCleaned::SegmentReturnType ColXprSegment;
|
|
248
|
-
typedef Matrix<Scalar,Dynamic,1> TempVectorType;
|
|
228
|
+
typedef Matrix<Scalar, Dynamic, 1> TempVectorType;
|
|
249
229
|
typedef typename TempVectorType::SegmentReturnType TempVecSegment;
|
|
250
230
|
|
|
251
231
|
Index n = mat.cols();
|
|
252
|
-
eigen_assert(mat.rows()==n && vec.size()==n);
|
|
232
|
+
eigen_assert(mat.rows() == n && vec.size() == n);
|
|
253
233
|
|
|
254
234
|
TempVectorType temp;
|
|
255
235
|
|
|
256
|
-
if(sigma>0)
|
|
257
|
-
{
|
|
236
|
+
if (sigma > 0) {
|
|
258
237
|
// This version is based on Givens rotations.
|
|
259
238
|
// It is faster than the other one below, but only works for updates,
|
|
260
239
|
// i.e., for sigma > 0
|
|
261
240
|
temp = sqrt(sigma) * vec;
|
|
262
241
|
|
|
263
|
-
for(Index i=0; i<n; ++i)
|
|
264
|
-
{
|
|
242
|
+
for (Index i = 0; i < n; ++i) {
|
|
265
243
|
JacobiRotation<Scalar> g;
|
|
266
|
-
g.makeGivens(mat(i,i), -temp(i), &mat(i,i));
|
|
244
|
+
g.makeGivens(mat(i, i), -temp(i), &mat(i, i));
|
|
267
245
|
|
|
268
|
-
Index rs = n-i-1;
|
|
269
|
-
if(rs>0)
|
|
270
|
-
{
|
|
246
|
+
Index rs = n - i - 1;
|
|
247
|
+
if (rs > 0) {
|
|
271
248
|
ColXprSegment x(mat.col(i).tail(rs));
|
|
272
249
|
TempVecSegment y(temp.tail(rs));
|
|
273
250
|
apply_rotation_in_the_plane(x, y, g);
|
|
274
251
|
}
|
|
275
252
|
}
|
|
276
|
-
}
|
|
277
|
-
else
|
|
278
|
-
{
|
|
253
|
+
} else {
|
|
279
254
|
temp = vec;
|
|
280
255
|
RealScalar beta = 1;
|
|
281
|
-
for(Index j=0; j<n; ++j)
|
|
282
|
-
|
|
283
|
-
RealScalar Ljj = numext::real(mat.coeff(j,j));
|
|
256
|
+
for (Index j = 0; j < n; ++j) {
|
|
257
|
+
RealScalar Ljj = numext::real(mat.coeff(j, j));
|
|
284
258
|
RealScalar dj = numext::abs2(Ljj);
|
|
285
259
|
Scalar wj = temp.coeff(j);
|
|
286
|
-
RealScalar swj2 = sigma*numext::abs2(wj);
|
|
287
|
-
RealScalar gamma = dj*beta + swj2;
|
|
260
|
+
RealScalar swj2 = sigma * numext::abs2(wj);
|
|
261
|
+
RealScalar gamma = dj * beta + swj2;
|
|
288
262
|
|
|
289
|
-
RealScalar x = dj + swj2/beta;
|
|
290
|
-
if (x<=RealScalar(0))
|
|
291
|
-
return j;
|
|
263
|
+
RealScalar x = dj + swj2 / beta;
|
|
264
|
+
if (x <= RealScalar(0)) return j;
|
|
292
265
|
RealScalar nLjj = sqrt(x);
|
|
293
|
-
mat.coeffRef(j,j) = nLjj;
|
|
294
|
-
beta += swj2/dj;
|
|
266
|
+
mat.coeffRef(j, j) = nLjj;
|
|
267
|
+
beta += swj2 / dj;
|
|
295
268
|
|
|
296
269
|
// Update the terms of L
|
|
297
|
-
Index rs = n-j-1;
|
|
298
|
-
if(rs)
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
270
|
+
Index rs = n - j - 1;
|
|
271
|
+
if (rs) {
|
|
272
|
+
temp.tail(rs) -= (wj / Ljj) * mat.col(j).tail(rs);
|
|
273
|
+
if (!numext::is_exactly_zero(gamma))
|
|
274
|
+
mat.col(j).tail(rs) =
|
|
275
|
+
(nLjj / Ljj) * mat.col(j).tail(rs) + (nLjj * sigma * numext::conj(wj) / gamma) * temp.tail(rs);
|
|
303
276
|
}
|
|
304
277
|
}
|
|
305
278
|
}
|
|
306
279
|
return -1;
|
|
307
280
|
}
|
|
308
281
|
|
|
309
|
-
template<typename Scalar>
|
|
310
|
-
{
|
|
282
|
+
template <typename Scalar>
|
|
283
|
+
struct llt_inplace<Scalar, Lower> {
|
|
311
284
|
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
312
|
-
template<typename MatrixType>
|
|
313
|
-
static Index unblocked(MatrixType& mat)
|
|
314
|
-
{
|
|
285
|
+
template <typename MatrixType>
|
|
286
|
+
static Index unblocked(MatrixType& mat) {
|
|
315
287
|
using std::sqrt;
|
|
316
288
|
|
|
317
|
-
eigen_assert(mat.rows()==mat.cols());
|
|
289
|
+
eigen_assert(mat.rows() == mat.cols());
|
|
318
290
|
const Index size = mat.rows();
|
|
319
|
-
for(Index k = 0; k < size; ++k)
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
Block<MatrixType,Dynamic
|
|
324
|
-
Block<MatrixType,
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
if (
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
if (k>0 && rs>0) A21.noalias() -= A20 * A10.adjoint();
|
|
333
|
-
if (rs>0) A21 /= x;
|
|
291
|
+
for (Index k = 0; k < size; ++k) {
|
|
292
|
+
Index rs = size - k - 1; // remaining size
|
|
293
|
+
|
|
294
|
+
Block<MatrixType, Dynamic, 1> A21(mat, k + 1, k, rs, 1);
|
|
295
|
+
Block<MatrixType, 1, Dynamic> A10(mat, k, 0, 1, k);
|
|
296
|
+
Block<MatrixType, Dynamic, Dynamic> A20(mat, k + 1, 0, rs, k);
|
|
297
|
+
|
|
298
|
+
RealScalar x = numext::real(mat.coeff(k, k));
|
|
299
|
+
if (k > 0) x -= A10.squaredNorm();
|
|
300
|
+
if (x <= RealScalar(0)) return k;
|
|
301
|
+
mat.coeffRef(k, k) = x = sqrt(x);
|
|
302
|
+
if (k > 0 && rs > 0) A21.noalias() -= A20 * A10.adjoint();
|
|
303
|
+
if (rs > 0) A21 /= x;
|
|
334
304
|
}
|
|
335
305
|
return -1;
|
|
336
306
|
}
|
|
337
307
|
|
|
338
|
-
template<typename MatrixType>
|
|
339
|
-
static Index blocked(MatrixType& m)
|
|
340
|
-
|
|
341
|
-
eigen_assert(m.rows()==m.cols());
|
|
308
|
+
template <typename MatrixType>
|
|
309
|
+
static Index blocked(MatrixType& m) {
|
|
310
|
+
eigen_assert(m.rows() == m.cols());
|
|
342
311
|
Index size = m.rows();
|
|
343
|
-
if(size<32)
|
|
344
|
-
return unblocked(m);
|
|
312
|
+
if (size < 32) return unblocked(m);
|
|
345
313
|
|
|
346
|
-
Index blockSize = size/8;
|
|
347
|
-
blockSize = (blockSize/16)*16;
|
|
348
|
-
blockSize = (std::min)((std::max)(blockSize,Index(8)), Index(128));
|
|
314
|
+
Index blockSize = size / 8;
|
|
315
|
+
blockSize = (blockSize / 16) * 16;
|
|
316
|
+
blockSize = (std::min)((std::max)(blockSize, Index(8)), Index(128));
|
|
349
317
|
|
|
350
|
-
for (Index k=0; k<size; k+=blockSize)
|
|
351
|
-
{
|
|
318
|
+
for (Index k = 0; k < size; k += blockSize) {
|
|
352
319
|
// partition the matrix:
|
|
353
320
|
// A00 | - | -
|
|
354
321
|
// lu = A10 | A11 | -
|
|
355
322
|
// A20 | A21 | A22
|
|
356
|
-
Index bs = (std::min)(blockSize, size-k);
|
|
323
|
+
Index bs = (std::min)(blockSize, size - k);
|
|
357
324
|
Index rs = size - k - bs;
|
|
358
|
-
Block<MatrixType,Dynamic,Dynamic> A11(m,k,
|
|
359
|
-
Block<MatrixType,Dynamic,Dynamic> A21(m,k+bs,k,
|
|
360
|
-
Block<MatrixType,Dynamic,Dynamic> A22(m,k+bs,k+bs,rs,rs);
|
|
325
|
+
Block<MatrixType, Dynamic, Dynamic> A11(m, k, k, bs, bs);
|
|
326
|
+
Block<MatrixType, Dynamic, Dynamic> A21(m, k + bs, k, rs, bs);
|
|
327
|
+
Block<MatrixType, Dynamic, Dynamic> A22(m, k + bs, k + bs, rs, rs);
|
|
361
328
|
|
|
362
329
|
Index ret;
|
|
363
|
-
if((ret=unblocked(A11))>=0) return k+ret;
|
|
364
|
-
if(rs>0) A11.adjoint().template triangularView<Upper>().template solveInPlace<OnTheRight>(A21);
|
|
365
|
-
if(rs
|
|
330
|
+
if ((ret = unblocked(A11)) >= 0) return k + ret;
|
|
331
|
+
if (rs > 0) A11.adjoint().template triangularView<Upper>().template solveInPlace<OnTheRight>(A21);
|
|
332
|
+
if (rs > 0)
|
|
333
|
+
A22.template selfadjointView<Lower>().rankUpdate(A21,
|
|
334
|
+
typename NumTraits<RealScalar>::Literal(-1)); // bottleneck
|
|
366
335
|
}
|
|
367
336
|
return -1;
|
|
368
337
|
}
|
|
369
338
|
|
|
370
|
-
template<typename MatrixType, typename VectorType>
|
|
371
|
-
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma)
|
|
372
|
-
{
|
|
339
|
+
template <typename MatrixType, typename VectorType>
|
|
340
|
+
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma) {
|
|
373
341
|
return Eigen::internal::llt_rank_update_lower(mat, vec, sigma);
|
|
374
342
|
}
|
|
375
343
|
};
|
|
376
344
|
|
|
377
|
-
template<typename Scalar>
|
|
378
|
-
{
|
|
345
|
+
template <typename Scalar>
|
|
346
|
+
struct llt_inplace<Scalar, Upper> {
|
|
379
347
|
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
380
348
|
|
|
381
|
-
template<typename MatrixType>
|
|
382
|
-
static EIGEN_STRONG_INLINE Index unblocked(MatrixType& mat)
|
|
383
|
-
{
|
|
349
|
+
template <typename MatrixType>
|
|
350
|
+
static EIGEN_STRONG_INLINE Index unblocked(MatrixType& mat) {
|
|
384
351
|
Transpose<MatrixType> matt(mat);
|
|
385
352
|
return llt_inplace<Scalar, Lower>::unblocked(matt);
|
|
386
353
|
}
|
|
387
|
-
template<typename MatrixType>
|
|
388
|
-
static EIGEN_STRONG_INLINE Index blocked(MatrixType& mat)
|
|
389
|
-
{
|
|
354
|
+
template <typename MatrixType>
|
|
355
|
+
static EIGEN_STRONG_INLINE Index blocked(MatrixType& mat) {
|
|
390
356
|
Transpose<MatrixType> matt(mat);
|
|
391
357
|
return llt_inplace<Scalar, Lower>::blocked(matt);
|
|
392
358
|
}
|
|
393
|
-
template<typename MatrixType, typename VectorType>
|
|
394
|
-
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma)
|
|
395
|
-
{
|
|
359
|
+
template <typename MatrixType, typename VectorType>
|
|
360
|
+
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma) {
|
|
396
361
|
Transpose<MatrixType> matt(mat);
|
|
397
362
|
return llt_inplace<Scalar, Lower>::rankUpdate(matt, vec.conjugate(), sigma);
|
|
398
363
|
}
|
|
399
364
|
};
|
|
400
365
|
|
|
401
|
-
template<typename MatrixType>
|
|
402
|
-
{
|
|
366
|
+
template <typename MatrixType>
|
|
367
|
+
struct LLT_Traits<MatrixType, Lower> {
|
|
403
368
|
typedef const TriangularView<const MatrixType, Lower> MatrixL;
|
|
404
369
|
typedef const TriangularView<const typename MatrixType::AdjointReturnType, Upper> MatrixU;
|
|
405
370
|
static inline MatrixL getL(const MatrixType& m) { return MatrixL(m); }
|
|
406
371
|
static inline MatrixU getU(const MatrixType& m) { return MatrixU(m.adjoint()); }
|
|
407
|
-
static bool inplace_decomposition(MatrixType& m)
|
|
408
|
-
|
|
372
|
+
static bool inplace_decomposition(MatrixType& m) {
|
|
373
|
+
return llt_inplace<typename MatrixType::Scalar, Lower>::blocked(m) == -1;
|
|
374
|
+
}
|
|
409
375
|
};
|
|
410
376
|
|
|
411
|
-
template<typename MatrixType>
|
|
412
|
-
{
|
|
377
|
+
template <typename MatrixType>
|
|
378
|
+
struct LLT_Traits<MatrixType, Upper> {
|
|
413
379
|
typedef const TriangularView<const typename MatrixType::AdjointReturnType, Lower> MatrixL;
|
|
414
380
|
typedef const TriangularView<const MatrixType, Upper> MatrixU;
|
|
415
381
|
static inline MatrixL getL(const MatrixType& m) { return MatrixL(m.adjoint()); }
|
|
416
382
|
static inline MatrixU getU(const MatrixType& m) { return MatrixU(m); }
|
|
417
|
-
static bool inplace_decomposition(MatrixType& m)
|
|
418
|
-
|
|
383
|
+
static bool inplace_decomposition(MatrixType& m) {
|
|
384
|
+
return llt_inplace<typename MatrixType::Scalar, Upper>::blocked(m) == -1;
|
|
385
|
+
}
|
|
419
386
|
};
|
|
420
387
|
|
|
421
|
-
}
|
|
388
|
+
} // end namespace internal
|
|
422
389
|
|
|
423
390
|
/** Computes / recomputes the Cholesky decomposition A = LL^* = U^*U of \a matrix
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
template<typename MatrixType, int
|
|
431
|
-
template<typename InputType>
|
|
432
|
-
LLT<MatrixType,
|
|
433
|
-
|
|
434
|
-
check_template_parameters();
|
|
435
|
-
|
|
436
|
-
eigen_assert(a.rows()==a.cols());
|
|
391
|
+
*
|
|
392
|
+
* \returns a reference to *this
|
|
393
|
+
*
|
|
394
|
+
* Example: \include TutorialLinAlgComputeTwice.cpp
|
|
395
|
+
* Output: \verbinclude TutorialLinAlgComputeTwice.out
|
|
396
|
+
*/
|
|
397
|
+
template <typename MatrixType, int UpLo_>
|
|
398
|
+
template <typename InputType>
|
|
399
|
+
LLT<MatrixType, UpLo_>& LLT<MatrixType, UpLo_>::compute(const EigenBase<InputType>& a) {
|
|
400
|
+
eigen_assert(a.rows() == a.cols());
|
|
437
401
|
const Index size = a.rows();
|
|
438
402
|
m_matrix.resize(size, size);
|
|
439
|
-
if (!internal::is_same_dense(m_matrix, a.derived()))
|
|
440
|
-
m_matrix = a.derived();
|
|
403
|
+
if (!internal::is_same_dense(m_matrix, a.derived())) m_matrix = a.derived();
|
|
441
404
|
|
|
442
405
|
// Compute matrix L1 norm = max abs column sum.
|
|
443
406
|
m_l1_norm = RealScalar(0);
|
|
444
407
|
// TODO move this code to SelfAdjointView
|
|
445
408
|
for (Index col = 0; col < size; ++col) {
|
|
446
409
|
RealScalar abs_col_sum;
|
|
447
|
-
if (
|
|
448
|
-
abs_col_sum =
|
|
410
|
+
if (UpLo_ == Lower)
|
|
411
|
+
abs_col_sum =
|
|
412
|
+
m_matrix.col(col).tail(size - col).template lpNorm<1>() + m_matrix.row(col).head(col).template lpNorm<1>();
|
|
449
413
|
else
|
|
450
|
-
abs_col_sum =
|
|
451
|
-
|
|
452
|
-
|
|
414
|
+
abs_col_sum =
|
|
415
|
+
m_matrix.col(col).head(col).template lpNorm<1>() + m_matrix.row(col).tail(size - col).template lpNorm<1>();
|
|
416
|
+
if (abs_col_sum > m_l1_norm) m_l1_norm = abs_col_sum;
|
|
453
417
|
}
|
|
454
418
|
|
|
455
419
|
m_isInitialized = true;
|
|
@@ -460,18 +424,17 @@ LLT<MatrixType,_UpLo>& LLT<MatrixType,_UpLo>::compute(const EigenBase<InputType>
|
|
|
460
424
|
}
|
|
461
425
|
|
|
462
426
|
/** Performs a rank one update (or dowdate) of the current decomposition.
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
template<typename
|
|
468
|
-
template<typename VectorType>
|
|
469
|
-
LLT<
|
|
470
|
-
{
|
|
427
|
+
* If A = LL^* before the rank one update,
|
|
428
|
+
* then after it we have LL^* = A + sigma * v v^* where \a v must be a vector
|
|
429
|
+
* of same dimension.
|
|
430
|
+
*/
|
|
431
|
+
template <typename MatrixType_, int UpLo_>
|
|
432
|
+
template <typename VectorType>
|
|
433
|
+
LLT<MatrixType_, UpLo_>& LLT<MatrixType_, UpLo_>::rankUpdate(const VectorType& v, const RealScalar& sigma) {
|
|
471
434
|
EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorType);
|
|
472
|
-
eigen_assert(v.size()==m_matrix.cols());
|
|
435
|
+
eigen_assert(v.size() == m_matrix.cols());
|
|
473
436
|
eigen_assert(m_isInitialized);
|
|
474
|
-
if(internal::llt_inplace<typename MatrixType::Scalar, UpLo>::rankUpdate(m_matrix,v,sigma)>=0)
|
|
437
|
+
if (internal::llt_inplace<typename MatrixType::Scalar, UpLo>::rankUpdate(m_matrix, v, sigma) >= 0)
|
|
475
438
|
m_info = NumericalIssue;
|
|
476
439
|
else
|
|
477
440
|
m_info = Success;
|
|
@@ -480,43 +443,40 @@ LLT<_MatrixType,_UpLo> & LLT<_MatrixType,_UpLo>::rankUpdate(const VectorType& v,
|
|
|
480
443
|
}
|
|
481
444
|
|
|
482
445
|
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
483
|
-
template<typename
|
|
484
|
-
template<typename RhsType, typename DstType>
|
|
485
|
-
void LLT<
|
|
486
|
-
{
|
|
446
|
+
template <typename MatrixType_, int UpLo_>
|
|
447
|
+
template <typename RhsType, typename DstType>
|
|
448
|
+
void LLT<MatrixType_, UpLo_>::_solve_impl(const RhsType& rhs, DstType& dst) const {
|
|
487
449
|
_solve_impl_transposed<true>(rhs, dst);
|
|
488
450
|
}
|
|
489
451
|
|
|
490
|
-
template<typename
|
|
491
|
-
template<bool Conjugate, typename RhsType, typename DstType>
|
|
492
|
-
void LLT<
|
|
493
|
-
|
|
494
|
-
dst = rhs;
|
|
452
|
+
template <typename MatrixType_, int UpLo_>
|
|
453
|
+
template <bool Conjugate, typename RhsType, typename DstType>
|
|
454
|
+
void LLT<MatrixType_, UpLo_>::_solve_impl_transposed(const RhsType& rhs, DstType& dst) const {
|
|
455
|
+
dst = rhs;
|
|
495
456
|
|
|
496
|
-
|
|
497
|
-
|
|
457
|
+
matrixL().template conjugateIf<!Conjugate>().solveInPlace(dst);
|
|
458
|
+
matrixU().template conjugateIf<!Conjugate>().solveInPlace(dst);
|
|
498
459
|
}
|
|
499
460
|
#endif
|
|
500
461
|
|
|
501
462
|
/** \internal use x = llt_object.solve(x);
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
template<typename MatrixType, int
|
|
515
|
-
template<typename Derived>
|
|
516
|
-
void LLT<MatrixType,
|
|
517
|
-
{
|
|
463
|
+
*
|
|
464
|
+
* This is the \em in-place version of solve().
|
|
465
|
+
*
|
|
466
|
+
* \param bAndX represents both the right-hand side matrix b and result x.
|
|
467
|
+
*
|
|
468
|
+
* This version avoids a copy when the right hand side matrix b is not needed anymore.
|
|
469
|
+
*
|
|
470
|
+
* \warning The parameter is only marked 'const' to make the C++ compiler accept a temporary expression here.
|
|
471
|
+
* This function will const_cast it, so constness isn't honored here.
|
|
472
|
+
*
|
|
473
|
+
* \sa LLT::solve(), MatrixBase::llt()
|
|
474
|
+
*/
|
|
475
|
+
template <typename MatrixType, int UpLo_>
|
|
476
|
+
template <typename Derived>
|
|
477
|
+
void LLT<MatrixType, UpLo_>::solveInPlace(const MatrixBase<Derived>& bAndX) const {
|
|
518
478
|
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
519
|
-
eigen_assert(m_matrix.rows()==bAndX.rows());
|
|
479
|
+
eigen_assert(m_matrix.rows() == bAndX.rows());
|
|
520
480
|
matrixL().solveInPlace(bAndX);
|
|
521
481
|
matrixU().solveInPlace(bAndX);
|
|
522
482
|
}
|
|
@@ -524,35 +484,31 @@ void LLT<MatrixType,_UpLo>::solveInPlace(const MatrixBase<Derived> &bAndX) const
|
|
|
524
484
|
/** \returns the matrix represented by the decomposition,
|
|
525
485
|
* i.e., it returns the product: L L^*.
|
|
526
486
|
* This function is provided for debug purpose. */
|
|
527
|
-
template<typename MatrixType, int
|
|
528
|
-
MatrixType LLT<MatrixType,
|
|
529
|
-
{
|
|
487
|
+
template <typename MatrixType, int UpLo_>
|
|
488
|
+
MatrixType LLT<MatrixType, UpLo_>::reconstructedMatrix() const {
|
|
530
489
|
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
531
490
|
return matrixL() * matrixL().adjoint().toDenseMatrix();
|
|
532
491
|
}
|
|
533
492
|
|
|
534
493
|
/** \cholesky_module
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
template<typename Derived>
|
|
539
|
-
inline const LLT<typename MatrixBase<Derived>::PlainObject>
|
|
540
|
-
MatrixBase<Derived>::llt() const
|
|
541
|
-
{
|
|
494
|
+
* \returns the LLT decomposition of \c *this
|
|
495
|
+
* \sa SelfAdjointView::llt()
|
|
496
|
+
*/
|
|
497
|
+
template <typename Derived>
|
|
498
|
+
inline const LLT<typename MatrixBase<Derived>::PlainObject> MatrixBase<Derived>::llt() const {
|
|
542
499
|
return LLT<PlainObject>(derived());
|
|
543
500
|
}
|
|
544
501
|
|
|
545
502
|
/** \cholesky_module
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
template<typename MatrixType, unsigned int UpLo>
|
|
550
|
-
inline const LLT<typename SelfAdjointView<MatrixType, UpLo>::PlainObject, UpLo>
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
return LLT<PlainObject,UpLo>(m_matrix);
|
|
503
|
+
* \returns the LLT decomposition of \c *this
|
|
504
|
+
* \sa SelfAdjointView::llt()
|
|
505
|
+
*/
|
|
506
|
+
template <typename MatrixType, unsigned int UpLo>
|
|
507
|
+
inline const LLT<typename SelfAdjointView<MatrixType, UpLo>::PlainObject, UpLo> SelfAdjointView<MatrixType, UpLo>::llt()
|
|
508
|
+
const {
|
|
509
|
+
return LLT<PlainObject, UpLo>(m_matrix);
|
|
554
510
|
}
|
|
555
511
|
|
|
556
|
-
}
|
|
512
|
+
} // end namespace Eigen
|
|
557
513
|
|
|
558
|
-
#endif
|
|
514
|
+
#endif // EIGEN_LLT_H
|