@smake/eigen 1.0.2 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/eigen/Eigen/AccelerateSupport +52 -0
- package/eigen/Eigen/Cholesky +18 -21
- package/eigen/Eigen/CholmodSupport +28 -28
- package/eigen/Eigen/Core +235 -326
- package/eigen/Eigen/Eigenvalues +16 -14
- package/eigen/Eigen/Geometry +21 -24
- package/eigen/Eigen/Householder +9 -8
- package/eigen/Eigen/IterativeLinearSolvers +8 -4
- package/eigen/Eigen/Jacobi +14 -14
- package/eigen/Eigen/KLUSupport +43 -0
- package/eigen/Eigen/LU +16 -20
- package/eigen/Eigen/MetisSupport +12 -12
- package/eigen/Eigen/OrderingMethods +54 -54
- package/eigen/Eigen/PaStiXSupport +23 -20
- package/eigen/Eigen/PardisoSupport +17 -14
- package/eigen/Eigen/QR +18 -21
- package/eigen/Eigen/QtAlignedMalloc +5 -13
- package/eigen/Eigen/SPQRSupport +21 -14
- package/eigen/Eigen/SVD +23 -18
- package/eigen/Eigen/Sparse +1 -4
- package/eigen/Eigen/SparseCholesky +18 -23
- package/eigen/Eigen/SparseCore +18 -17
- package/eigen/Eigen/SparseLU +12 -8
- package/eigen/Eigen/SparseQR +16 -14
- package/eigen/Eigen/StdDeque +5 -2
- package/eigen/Eigen/StdList +5 -2
- package/eigen/Eigen/StdVector +5 -2
- package/eigen/Eigen/SuperLUSupport +30 -24
- package/eigen/Eigen/ThreadPool +80 -0
- package/eigen/Eigen/UmfPackSupport +19 -17
- package/eigen/Eigen/Version +14 -0
- package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
- package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +377 -401
- package/eigen/Eigen/src/Cholesky/LLT.h +332 -360
- package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +620 -521
- package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +239 -0
- package/eigen/Eigen/src/Core/Array.h +341 -294
- package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
- package/eigen/Eigen/src/Core/ArrayWrapper.h +127 -171
- package/eigen/Eigen/src/Core/Assign.h +30 -40
- package/eigen/Eigen/src/Core/AssignEvaluator.h +711 -589
- package/eigen/Eigen/src/Core/Assign_MKL.h +130 -125
- package/eigen/Eigen/src/Core/BandMatrix.h +268 -283
- package/eigen/Eigen/src/Core/Block.h +375 -398
- package/eigen/Eigen/src/Core/CommaInitializer.h +86 -97
- package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
- package/eigen/Eigen/src/Core/CoreEvaluators.h +1356 -1026
- package/eigen/Eigen/src/Core/CoreIterators.h +73 -59
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +114 -132
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +726 -617
- package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +56 -68
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +132 -95
- package/eigen/Eigen/src/Core/DenseBase.h +632 -571
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -624
- package/eigen/Eigen/src/Core/DenseStorage.h +512 -509
- package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
- package/eigen/Eigen/src/Core/Diagonal.h +169 -210
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +351 -274
- package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
- package/eigen/Eigen/src/Core/Dot.h +172 -222
- package/eigen/Eigen/src/Core/EigenBase.h +75 -85
- package/eigen/Eigen/src/Core/Fill.h +138 -0
- package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -109
- package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
- package/eigen/Eigen/src/Core/GeneralProduct.h +327 -263
- package/eigen/Eigen/src/Core/GenericPacketMath.h +1472 -360
- package/eigen/Eigen/src/Core/GlobalFunctions.h +194 -151
- package/eigen/Eigen/src/Core/IO.h +147 -139
- package/eigen/Eigen/src/Core/IndexedView.h +321 -0
- package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
- package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Core/Inverse.h +56 -66
- package/eigen/Eigen/src/Core/Map.h +124 -142
- package/eigen/Eigen/src/Core/MapBase.h +256 -281
- package/eigen/Eigen/src/Core/MathFunctions.h +1620 -938
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +233 -71
- package/eigen/Eigen/src/Core/Matrix.h +491 -416
- package/eigen/Eigen/src/Core/MatrixBase.h +468 -453
- package/eigen/Eigen/src/Core/NestByValue.h +66 -85
- package/eigen/Eigen/src/Core/NoAlias.h +79 -85
- package/eigen/Eigen/src/Core/NumTraits.h +235 -148
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +253 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
- package/eigen/Eigen/src/Core/PlainObjectBase.h +871 -894
- package/eigen/Eigen/src/Core/Product.h +260 -139
- package/eigen/Eigen/src/Core/ProductEvaluators.h +863 -714
- package/eigen/Eigen/src/Core/Random.h +161 -136
- package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
- package/eigen/Eigen/src/Core/RealView.h +250 -0
- package/eigen/Eigen/src/Core/Redux.h +366 -336
- package/eigen/Eigen/src/Core/Ref.h +308 -209
- package/eigen/Eigen/src/Core/Replicate.h +94 -106
- package/eigen/Eigen/src/Core/Reshaped.h +398 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +49 -55
- package/eigen/Eigen/src/Core/Reverse.h +136 -145
- package/eigen/Eigen/src/Core/Select.h +70 -140
- package/eigen/Eigen/src/Core/SelfAdjointView.h +262 -285
- package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
- package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
- package/eigen/Eigen/src/Core/Solve.h +97 -111
- package/eigen/Eigen/src/Core/SolveTriangular.h +131 -129
- package/eigen/Eigen/src/Core/SolverBase.h +138 -101
- package/eigen/Eigen/src/Core/StableNorm.h +156 -160
- package/eigen/Eigen/src/Core/StlIterators.h +619 -0
- package/eigen/Eigen/src/Core/Stride.h +91 -88
- package/eigen/Eigen/src/Core/Swap.h +70 -38
- package/eigen/Eigen/src/Core/Transpose.h +295 -273
- package/eigen/Eigen/src/Core/Transpositions.h +272 -317
- package/eigen/Eigen/src/Core/TriangularMatrix.h +670 -755
- package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
- package/eigen/Eigen/src/Core/VectorwiseOp.h +668 -630
- package/eigen/Eigen/src/Core/Visitor.h +480 -216
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +407 -293
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +79 -388
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2935 -491
- package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +279 -22
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +472 -0
- package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +85 -333
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +2490 -649
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
- package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +277 -0
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +521 -298
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +39 -280
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +3686 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +205 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +901 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +3391 -723
- package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +866 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +113 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +2634 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +227 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +1091 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +11 -13
- package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
- package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +104 -0
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1712 -0
- package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +77 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
- package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
- package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
- package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
- package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
- package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +620 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +379 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1237 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +531 -289
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +243 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +50 -73
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +5915 -579
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1642 -0
- package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +366 -334
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +40 -514
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +2164 -675
- package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +188 -35
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +48 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +674 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +52 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +227 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +303 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +576 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +83 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +434 -261
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +160 -53
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +1073 -605
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +123 -117
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +594 -322
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +204 -118
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +110 -97
- package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1158 -530
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +2329 -1333
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +328 -364
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +191 -178
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +85 -82
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +396 -542
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
- package/eigen/Eigen/src/Core/products/Parallelizer.h +208 -92
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +331 -375
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +139 -146
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -46
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
- package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -275
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +70 -93
- package/eigen/Eigen/src/Core/util/Assert.h +158 -0
- package/eigen/Eigen/src/Core/util/BlasUtil.h +413 -290
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +543 -0
- package/eigen/Eigen/src/Core/util/Constants.h +314 -263
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -78
- package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +450 -224
- package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
- package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +487 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +279 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +39 -30
- package/eigen/Eigen/src/Core/util/Macros.h +939 -646
- package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
- package/eigen/Eigen/src/Core/util/Memory.h +1042 -650
- package/eigen/Eigen/src/Core/util/Meta.h +618 -426
- package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
- package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +51 -164
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +445 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +793 -538
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
- package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
- package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +91 -107
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +539 -606
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +348 -382
- package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +579 -600
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +434 -461
- package/eigen/Eigen/src/Geometry/AlignedBox.h +307 -214
- package/eigen/Eigen/src/Geometry/AngleAxis.h +135 -137
- package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
- package/eigen/Eigen/src/Geometry/Homogeneous.h +289 -333
- package/eigen/Eigen/src/Geometry/Hyperplane.h +152 -161
- package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -145
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +141 -104
- package/eigen/Eigen/src/Geometry/Quaternion.h +595 -497
- package/eigen/Eigen/src/Geometry/Rotation2D.h +110 -108
- package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
- package/eigen/Eigen/src/Geometry/Scaling.h +115 -90
- package/eigen/Eigen/src/Geometry/Transform.h +896 -953
- package/eigen/Eigen/src/Geometry/Translation.h +100 -98
- package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +154 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +54 -42
- package/eigen/Eigen/src/Householder/Householder.h +104 -122
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +416 -382
- package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +153 -166
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +127 -138
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +95 -124
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +269 -267
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +246 -259
- package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +218 -217
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +80 -103
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +59 -63
- package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/Jacobi/Jacobi.h +256 -291
- package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +339 -0
- package/eigen/Eigen/src/LU/Determinant.h +60 -63
- package/eigen/Eigen/src/LU/FullPivLU.h +561 -626
- package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/LU/InverseImpl.h +213 -275
- package/eigen/Eigen/src/LU/PartialPivLU.h +407 -435
- package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +353 -0
- package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
- package/eigen/Eigen/src/OrderingMethods/Amd.h +250 -282
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +950 -1103
- package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +111 -122
- package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
- package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -429
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +494 -473
- package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +223 -137
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +517 -460
- package/eigen/Eigen/src/QR/HouseholderQR.h +412 -278
- package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
- package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +263 -261
- package/eigen/Eigen/src/SVD/BDCSVD.h +872 -679
- package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
- package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SVD/JacobiSVD.h +585 -543
- package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
- package/eigen/Eigen/src/SVD/SVDBase.h +281 -160
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +202 -237
- package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +769 -590
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +318 -129
- package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -236
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +140 -184
- package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +174 -111
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +408 -477
- package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +531 -280
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +559 -347
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +185 -191
- package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
- package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
- package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
- package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1614 -1142
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -357
- package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +100 -91
- package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
- package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +371 -414
- package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
- package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
- package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
- package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +146 -115
- package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
- package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
- package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
- package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseLU/SparseLU.h +814 -618
- package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
- package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +273 -255
- package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
- package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +90 -101
- package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
- package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
- package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +125 -133
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
- package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
- package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
- package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
- package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SparseQR/SparseQR.h +451 -490
- package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -105
- package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
- package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
- package/eigen/Eigen/src/StlSupport/details.h +48 -50
- package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -732
- package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
- package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
- package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
- package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
- package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
- package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
- package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
- package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
- package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
- package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
- package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
- package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
- package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +480 -380
- package/eigen/Eigen/src/misc/Image.h +41 -43
- package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
- package/eigen/Eigen/src/misc/Kernel.h +39 -41
- package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
- package/eigen/Eigen/src/misc/blas.h +83 -426
- package/eigen/Eigen/src/misc/lapacke.h +9976 -16182
- package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
- package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
- package/eigen/Eigen/src/plugins/BlockMethods.inc +1370 -0
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.inc +167 -0
- package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
- package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
- package/lib/LibEigen.d.ts +4 -0
- package/lib/LibEigen.js +14 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +7 -3
- package/package.json +2 -10
- package/eigen/Eigen/CMakeLists.txt +0 -19
- package/eigen/Eigen/src/Core/BooleanRedux.h +0 -164
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -103
- package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
- package/eigen/Eigen/src/Core/arch/CUDA/MathFunctions.h +0 -91
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
- package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
- package/eigen/Eigen/src/misc/lapack.h +0 -152
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -332
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -552
- package/eigen/Eigen/src/plugins/BlockMethods.h +0 -1058
- package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +0 -163
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -85
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -10,439 +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{
|
|
16
|
-
template<typename MatrixType, int UpLo> struct LLT_Traits;
|
|
17
|
-
}
|
|
18
|
+
namespace internal {
|
|
18
19
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
* \tparam _UpLo the triangular part that will be used for the decompositon: Lower (default) or Upper.
|
|
27
|
-
* The other triangular part won't be read.
|
|
28
|
-
*
|
|
29
|
-
* This class performs a LL^T Cholesky decomposition of a symmetric, positive definite
|
|
30
|
-
* matrix A such that A = LL^* = U^*U, where L is lower triangular.
|
|
31
|
-
*
|
|
32
|
-
* While the Cholesky decomposition is particularly useful to solve selfadjoint problems like D^*D x = b,
|
|
33
|
-
* for that purpose, we recommend the Cholesky decomposition without square root which is more stable
|
|
34
|
-
* and even faster. Nevertheless, this standard Cholesky decomposition remains useful in many other
|
|
35
|
-
* situations like generalised eigen problems with hermitian matrices.
|
|
36
|
-
*
|
|
37
|
-
* Remember that Cholesky decompositions are not rank-revealing. This LLT decomposition is only stable on positive definite matrices,
|
|
38
|
-
* use LDLT instead for the semidefinite case. Also, do not use a Cholesky decomposition to determine whether a system of equations
|
|
39
|
-
* has a solution.
|
|
40
|
-
*
|
|
41
|
-
* Example: \include LLT_example.cpp
|
|
42
|
-
* Output: \verbinclude LLT_example.out
|
|
43
|
-
*
|
|
44
|
-
* \b Performance: for best performance, it is recommended to use a column-major storage format
|
|
45
|
-
* with the Lower triangular part (the default), or, equivalently, a row-major storage format
|
|
46
|
-
* with the Upper triangular part. Otherwise, you might get a 20% slowdown for the full factorization
|
|
47
|
-
* step, and rank-updates can be up to 3 times slower.
|
|
48
|
-
*
|
|
49
|
-
* This class supports the \link InplaceDecomposition inplace decomposition \endlink mechanism.
|
|
50
|
-
*
|
|
51
|
-
* Note that during the decomposition, only the lower (or upper, as defined by _UpLo) triangular part of A is considered.
|
|
52
|
-
* Therefore, the strict lower part does not have to store correct values.
|
|
53
|
-
*
|
|
54
|
-
* \sa MatrixBase::llt(), SelfAdjointView::llt(), class LDLT
|
|
55
|
-
*/
|
|
56
|
-
template<typename _MatrixType, int _UpLo> class LLT
|
|
57
|
-
{
|
|
58
|
-
public:
|
|
59
|
-
typedef _MatrixType MatrixType;
|
|
60
|
-
enum {
|
|
61
|
-
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
|
|
62
|
-
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
|
|
63
|
-
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
|
|
64
|
-
};
|
|
65
|
-
typedef typename MatrixType::Scalar Scalar;
|
|
66
|
-
typedef typename NumTraits<typename MatrixType::Scalar>::Real RealScalar;
|
|
67
|
-
typedef Eigen::Index Index; ///< \deprecated since Eigen 3.3
|
|
68
|
-
typedef typename MatrixType::StorageIndex StorageIndex;
|
|
69
|
-
|
|
70
|
-
enum {
|
|
71
|
-
PacketSize = internal::packet_traits<Scalar>::size,
|
|
72
|
-
AlignmentMask = int(PacketSize)-1,
|
|
73
|
-
UpLo = _UpLo
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
typedef internal::LLT_Traits<MatrixType,UpLo> Traits;
|
|
77
|
-
|
|
78
|
-
/**
|
|
79
|
-
* \brief Default Constructor.
|
|
80
|
-
*
|
|
81
|
-
* The default constructor is useful in cases in which the user intends to
|
|
82
|
-
* perform decompositions via LLT::compute(const MatrixType&).
|
|
83
|
-
*/
|
|
84
|
-
LLT() : m_matrix(), m_isInitialized(false) {}
|
|
85
|
-
|
|
86
|
-
/** \brief Default Constructor with memory preallocation
|
|
87
|
-
*
|
|
88
|
-
* Like the default constructor but with preallocation of the internal data
|
|
89
|
-
* according to the specified problem \a size.
|
|
90
|
-
* \sa LLT()
|
|
91
|
-
*/
|
|
92
|
-
explicit LLT(Index size) : m_matrix(size, size),
|
|
93
|
-
m_isInitialized(false) {}
|
|
94
|
-
|
|
95
|
-
template<typename InputType>
|
|
96
|
-
explicit LLT(const EigenBase<InputType>& matrix)
|
|
97
|
-
: m_matrix(matrix.rows(), matrix.cols()),
|
|
98
|
-
m_isInitialized(false)
|
|
99
|
-
{
|
|
100
|
-
compute(matrix.derived());
|
|
101
|
-
}
|
|
20
|
+
template <typename MatrixType_, int UpLo_>
|
|
21
|
+
struct traits<LLT<MatrixType_, UpLo_> > : traits<MatrixType_> {
|
|
22
|
+
typedef MatrixXpr XprKind;
|
|
23
|
+
typedef SolverStorage StorageKind;
|
|
24
|
+
typedef int StorageIndex;
|
|
25
|
+
enum { Flags = 0 };
|
|
26
|
+
};
|
|
102
27
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
* \c MatrixType is a Eigen::Ref.
|
|
107
|
-
*
|
|
108
|
-
* \sa LLT(const EigenBase&)
|
|
109
|
-
*/
|
|
110
|
-
template<typename InputType>
|
|
111
|
-
explicit LLT(EigenBase<InputType>& matrix)
|
|
112
|
-
: m_matrix(matrix.derived()),
|
|
113
|
-
m_isInitialized(false)
|
|
114
|
-
{
|
|
115
|
-
compute(matrix.derived());
|
|
116
|
-
}
|
|
28
|
+
template <typename MatrixType, int UpLo>
|
|
29
|
+
struct LLT_Traits;
|
|
30
|
+
} // namespace internal
|
|
117
31
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
32
|
+
/** \ingroup Cholesky_Module
|
|
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
|
+
}
|
|
124
103
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
+
}
|
|
131
115
|
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
* Example: \include LLT_solve.cpp
|
|
138
|
-
* Output: \verbinclude LLT_solve.out
|
|
139
|
-
*
|
|
140
|
-
* \sa solveInPlace(), MatrixBase::llt(), SelfAdjointView::llt()
|
|
141
|
-
*/
|
|
142
|
-
template<typename Rhs>
|
|
143
|
-
inline const Solve<LLT, Rhs>
|
|
144
|
-
solve(const MatrixBase<Rhs>& b) const
|
|
145
|
-
{
|
|
146
|
-
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
147
|
-
eigen_assert(m_matrix.rows()==b.rows()
|
|
148
|
-
&& "LLT::solve(): invalid number of rows of the right hand side matrix b");
|
|
149
|
-
return Solve<LLT, Rhs>(*this, b.derived());
|
|
150
|
-
}
|
|
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
|
+
}
|
|
151
121
|
|
|
152
|
-
|
|
153
|
-
|
|
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
|
+
}
|
|
154
127
|
|
|
155
|
-
|
|
156
|
-
|
|
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
|
|
157
142
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
*/
|
|
161
|
-
RealScalar rcond() const
|
|
162
|
-
{
|
|
163
|
-
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
164
|
-
eigen_assert(m_info == Success && "LLT failed because matrix appears to be negative");
|
|
165
|
-
return internal::rcond_estimate_helper(m_l1_norm, *this);
|
|
166
|
-
}
|
|
143
|
+
template <typename Derived>
|
|
144
|
+
void solveInPlace(const MatrixBase<Derived>& bAndX) const;
|
|
167
145
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
* TODO: document the storage layout
|
|
171
|
-
*/
|
|
172
|
-
inline const MatrixType& matrixLLT() const
|
|
173
|
-
{
|
|
174
|
-
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
175
|
-
return m_matrix;
|
|
176
|
-
}
|
|
146
|
+
template <typename InputType>
|
|
147
|
+
LLT& compute(const EigenBase<InputType>& matrix);
|
|
177
148
|
|
|
178
|
-
|
|
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
|
+
}
|
|
179
157
|
|
|
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
|
+
}
|
|
180
166
|
|
|
181
|
-
|
|
182
|
-
*
|
|
183
|
-
* \returns \c Success if computation was succesful,
|
|
184
|
-
* \c NumericalIssue if the matrix.appears not to be positive definite.
|
|
185
|
-
*/
|
|
186
|
-
ComputationInfo info() const
|
|
187
|
-
{
|
|
188
|
-
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
189
|
-
return m_info;
|
|
190
|
-
}
|
|
167
|
+
MatrixType reconstructedMatrix() const;
|
|
191
168
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
+
}
|
|
198
178
|
|
|
199
|
-
|
|
200
|
-
|
|
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; }
|
|
201
186
|
|
|
202
|
-
|
|
203
|
-
|
|
187
|
+
constexpr Index rows() const noexcept { return m_matrix.rows(); }
|
|
188
|
+
constexpr Index cols() const noexcept { return m_matrix.cols(); }
|
|
204
189
|
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
EIGEN_DEVICE_FUNC
|
|
208
|
-
void _solve_impl(const RhsType &rhs, DstType &dst) const;
|
|
209
|
-
#endif
|
|
190
|
+
template <typename VectorType>
|
|
191
|
+
LLT& rankUpdate(const VectorType& vec, const RealScalar& sigma = 1);
|
|
210
192
|
|
|
211
|
-
|
|
193
|
+
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
194
|
+
template <typename RhsType, typename DstType>
|
|
195
|
+
void _solve_impl(const RhsType& rhs, DstType& dst) const;
|
|
212
196
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
}
|
|
197
|
+
template <bool Conjugate, typename RhsType, typename DstType>
|
|
198
|
+
void _solve_impl_transposed(const RhsType& rhs, DstType& dst) const;
|
|
199
|
+
#endif
|
|
217
200
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
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;
|
|
226
212
|
};
|
|
227
213
|
|
|
228
214
|
namespace internal {
|
|
229
215
|
|
|
230
|
-
template<typename Scalar, int UpLo>
|
|
216
|
+
template <typename Scalar, int UpLo>
|
|
217
|
+
struct llt_inplace;
|
|
231
218
|
|
|
232
|
-
template<typename MatrixType, typename VectorType>
|
|
233
|
-
static Index llt_rank_update_lower(MatrixType& mat, const VectorType& vec,
|
|
234
|
-
{
|
|
219
|
+
template <typename MatrixType, typename VectorType>
|
|
220
|
+
static Index llt_rank_update_lower(MatrixType& mat, const VectorType& vec,
|
|
221
|
+
const typename MatrixType::RealScalar& sigma) {
|
|
235
222
|
using std::sqrt;
|
|
236
223
|
typedef typename MatrixType::Scalar Scalar;
|
|
237
224
|
typedef typename MatrixType::RealScalar RealScalar;
|
|
238
225
|
typedef typename MatrixType::ColXpr ColXpr;
|
|
239
|
-
typedef
|
|
226
|
+
typedef internal::remove_all_t<ColXpr> ColXprCleaned;
|
|
240
227
|
typedef typename ColXprCleaned::SegmentReturnType ColXprSegment;
|
|
241
|
-
typedef Matrix<Scalar,Dynamic,1> TempVectorType;
|
|
228
|
+
typedef Matrix<Scalar, Dynamic, 1> TempVectorType;
|
|
242
229
|
typedef typename TempVectorType::SegmentReturnType TempVecSegment;
|
|
243
230
|
|
|
244
231
|
Index n = mat.cols();
|
|
245
|
-
eigen_assert(mat.rows()==n && vec.size()==n);
|
|
232
|
+
eigen_assert(mat.rows() == n && vec.size() == n);
|
|
246
233
|
|
|
247
234
|
TempVectorType temp;
|
|
248
235
|
|
|
249
|
-
if(sigma>0)
|
|
250
|
-
{
|
|
236
|
+
if (sigma > 0) {
|
|
251
237
|
// This version is based on Givens rotations.
|
|
252
238
|
// It is faster than the other one below, but only works for updates,
|
|
253
239
|
// i.e., for sigma > 0
|
|
254
240
|
temp = sqrt(sigma) * vec;
|
|
255
241
|
|
|
256
|
-
for(Index i=0; i<n; ++i)
|
|
257
|
-
{
|
|
242
|
+
for (Index i = 0; i < n; ++i) {
|
|
258
243
|
JacobiRotation<Scalar> g;
|
|
259
|
-
g.makeGivens(mat(i,i), -temp(i), &mat(i,i));
|
|
244
|
+
g.makeGivens(mat(i, i), -temp(i), &mat(i, i));
|
|
260
245
|
|
|
261
|
-
Index rs = n-i-1;
|
|
262
|
-
if(rs>0)
|
|
263
|
-
{
|
|
246
|
+
Index rs = n - i - 1;
|
|
247
|
+
if (rs > 0) {
|
|
264
248
|
ColXprSegment x(mat.col(i).tail(rs));
|
|
265
249
|
TempVecSegment y(temp.tail(rs));
|
|
266
250
|
apply_rotation_in_the_plane(x, y, g);
|
|
267
251
|
}
|
|
268
252
|
}
|
|
269
|
-
}
|
|
270
|
-
else
|
|
271
|
-
{
|
|
253
|
+
} else {
|
|
272
254
|
temp = vec;
|
|
273
255
|
RealScalar beta = 1;
|
|
274
|
-
for(Index j=0; j<n; ++j)
|
|
275
|
-
|
|
276
|
-
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));
|
|
277
258
|
RealScalar dj = numext::abs2(Ljj);
|
|
278
259
|
Scalar wj = temp.coeff(j);
|
|
279
|
-
RealScalar swj2 = sigma*numext::abs2(wj);
|
|
280
|
-
RealScalar gamma = dj*beta + swj2;
|
|
260
|
+
RealScalar swj2 = sigma * numext::abs2(wj);
|
|
261
|
+
RealScalar gamma = dj * beta + swj2;
|
|
281
262
|
|
|
282
|
-
RealScalar x = dj + swj2/beta;
|
|
283
|
-
if (x<=RealScalar(0))
|
|
284
|
-
return j;
|
|
263
|
+
RealScalar x = dj + swj2 / beta;
|
|
264
|
+
if (x <= RealScalar(0)) return j;
|
|
285
265
|
RealScalar nLjj = sqrt(x);
|
|
286
|
-
mat.coeffRef(j,j) = nLjj;
|
|
287
|
-
beta += swj2/dj;
|
|
266
|
+
mat.coeffRef(j, j) = nLjj;
|
|
267
|
+
beta += swj2 / dj;
|
|
288
268
|
|
|
289
269
|
// Update the terms of L
|
|
290
|
-
Index rs = n-j-1;
|
|
291
|
-
if(rs)
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
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);
|
|
296
276
|
}
|
|
297
277
|
}
|
|
298
278
|
}
|
|
299
279
|
return -1;
|
|
300
280
|
}
|
|
301
281
|
|
|
302
|
-
template<typename Scalar>
|
|
303
|
-
{
|
|
282
|
+
template <typename Scalar>
|
|
283
|
+
struct llt_inplace<Scalar, Lower> {
|
|
304
284
|
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
305
|
-
template<typename MatrixType>
|
|
306
|
-
static Index unblocked(MatrixType& mat)
|
|
307
|
-
{
|
|
285
|
+
template <typename MatrixType>
|
|
286
|
+
static Index unblocked(MatrixType& mat) {
|
|
308
287
|
using std::sqrt;
|
|
309
288
|
|
|
310
|
-
eigen_assert(mat.rows()==mat.cols());
|
|
289
|
+
eigen_assert(mat.rows() == mat.cols());
|
|
311
290
|
const Index size = mat.rows();
|
|
312
|
-
for(Index k = 0; k < size; ++k)
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
Block<MatrixType,Dynamic
|
|
317
|
-
Block<MatrixType,
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
if (
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
if (k>0 && rs>0) A21.noalias() -= A20 * A10.adjoint();
|
|
326
|
-
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;
|
|
327
304
|
}
|
|
328
305
|
return -1;
|
|
329
306
|
}
|
|
330
307
|
|
|
331
|
-
template<typename MatrixType>
|
|
332
|
-
static Index blocked(MatrixType& m)
|
|
333
|
-
|
|
334
|
-
eigen_assert(m.rows()==m.cols());
|
|
308
|
+
template <typename MatrixType>
|
|
309
|
+
static Index blocked(MatrixType& m) {
|
|
310
|
+
eigen_assert(m.rows() == m.cols());
|
|
335
311
|
Index size = m.rows();
|
|
336
|
-
if(size<32)
|
|
337
|
-
return unblocked(m);
|
|
312
|
+
if (size < 32) return unblocked(m);
|
|
338
313
|
|
|
339
|
-
Index blockSize = size/8;
|
|
340
|
-
blockSize = (blockSize/16)*16;
|
|
341
|
-
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));
|
|
342
317
|
|
|
343
|
-
for (Index k=0; k<size; k+=blockSize)
|
|
344
|
-
{
|
|
318
|
+
for (Index k = 0; k < size; k += blockSize) {
|
|
345
319
|
// partition the matrix:
|
|
346
320
|
// A00 | - | -
|
|
347
321
|
// lu = A10 | A11 | -
|
|
348
322
|
// A20 | A21 | A22
|
|
349
|
-
Index bs = (std::min)(blockSize, size-k);
|
|
323
|
+
Index bs = (std::min)(blockSize, size - k);
|
|
350
324
|
Index rs = size - k - bs;
|
|
351
|
-
Block<MatrixType,Dynamic,Dynamic> A11(m,k,
|
|
352
|
-
Block<MatrixType,Dynamic,Dynamic> A21(m,k+bs,k,
|
|
353
|
-
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);
|
|
354
328
|
|
|
355
329
|
Index ret;
|
|
356
|
-
if((ret=unblocked(A11))>=0) return k+ret;
|
|
357
|
-
if(rs>0) A11.adjoint().template triangularView<Upper>().template solveInPlace<OnTheRight>(A21);
|
|
358
|
-
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
|
|
359
335
|
}
|
|
360
336
|
return -1;
|
|
361
337
|
}
|
|
362
338
|
|
|
363
|
-
template<typename MatrixType, typename VectorType>
|
|
364
|
-
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma)
|
|
365
|
-
{
|
|
339
|
+
template <typename MatrixType, typename VectorType>
|
|
340
|
+
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma) {
|
|
366
341
|
return Eigen::internal::llt_rank_update_lower(mat, vec, sigma);
|
|
367
342
|
}
|
|
368
343
|
};
|
|
369
344
|
|
|
370
|
-
template<typename Scalar>
|
|
371
|
-
{
|
|
345
|
+
template <typename Scalar>
|
|
346
|
+
struct llt_inplace<Scalar, Upper> {
|
|
372
347
|
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
373
348
|
|
|
374
|
-
template<typename MatrixType>
|
|
375
|
-
static EIGEN_STRONG_INLINE Index unblocked(MatrixType& mat)
|
|
376
|
-
{
|
|
349
|
+
template <typename MatrixType>
|
|
350
|
+
static EIGEN_STRONG_INLINE Index unblocked(MatrixType& mat) {
|
|
377
351
|
Transpose<MatrixType> matt(mat);
|
|
378
352
|
return llt_inplace<Scalar, Lower>::unblocked(matt);
|
|
379
353
|
}
|
|
380
|
-
template<typename MatrixType>
|
|
381
|
-
static EIGEN_STRONG_INLINE Index blocked(MatrixType& mat)
|
|
382
|
-
{
|
|
354
|
+
template <typename MatrixType>
|
|
355
|
+
static EIGEN_STRONG_INLINE Index blocked(MatrixType& mat) {
|
|
383
356
|
Transpose<MatrixType> matt(mat);
|
|
384
357
|
return llt_inplace<Scalar, Lower>::blocked(matt);
|
|
385
358
|
}
|
|
386
|
-
template<typename MatrixType, typename VectorType>
|
|
387
|
-
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma)
|
|
388
|
-
{
|
|
359
|
+
template <typename MatrixType, typename VectorType>
|
|
360
|
+
static Index rankUpdate(MatrixType& mat, const VectorType& vec, const RealScalar& sigma) {
|
|
389
361
|
Transpose<MatrixType> matt(mat);
|
|
390
362
|
return llt_inplace<Scalar, Lower>::rankUpdate(matt, vec.conjugate(), sigma);
|
|
391
363
|
}
|
|
392
364
|
};
|
|
393
365
|
|
|
394
|
-
template<typename MatrixType>
|
|
395
|
-
{
|
|
366
|
+
template <typename MatrixType>
|
|
367
|
+
struct LLT_Traits<MatrixType, Lower> {
|
|
396
368
|
typedef const TriangularView<const MatrixType, Lower> MatrixL;
|
|
397
369
|
typedef const TriangularView<const typename MatrixType::AdjointReturnType, Upper> MatrixU;
|
|
398
370
|
static inline MatrixL getL(const MatrixType& m) { return MatrixL(m); }
|
|
399
371
|
static inline MatrixU getU(const MatrixType& m) { return MatrixU(m.adjoint()); }
|
|
400
|
-
static bool inplace_decomposition(MatrixType& m)
|
|
401
|
-
|
|
372
|
+
static bool inplace_decomposition(MatrixType& m) {
|
|
373
|
+
return llt_inplace<typename MatrixType::Scalar, Lower>::blocked(m) == -1;
|
|
374
|
+
}
|
|
402
375
|
};
|
|
403
376
|
|
|
404
|
-
template<typename MatrixType>
|
|
405
|
-
{
|
|
377
|
+
template <typename MatrixType>
|
|
378
|
+
struct LLT_Traits<MatrixType, Upper> {
|
|
406
379
|
typedef const TriangularView<const typename MatrixType::AdjointReturnType, Lower> MatrixL;
|
|
407
380
|
typedef const TriangularView<const MatrixType, Upper> MatrixU;
|
|
408
381
|
static inline MatrixL getL(const MatrixType& m) { return MatrixL(m.adjoint()); }
|
|
409
382
|
static inline MatrixU getU(const MatrixType& m) { return MatrixU(m); }
|
|
410
|
-
static bool inplace_decomposition(MatrixType& m)
|
|
411
|
-
|
|
383
|
+
static bool inplace_decomposition(MatrixType& m) {
|
|
384
|
+
return llt_inplace<typename MatrixType::Scalar, Upper>::blocked(m) == -1;
|
|
385
|
+
}
|
|
412
386
|
};
|
|
413
387
|
|
|
414
|
-
}
|
|
388
|
+
} // end namespace internal
|
|
415
389
|
|
|
416
390
|
/** Computes / recomputes the Cholesky decomposition A = LL^* = U^*U of \a matrix
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
template<typename MatrixType, int
|
|
424
|
-
template<typename InputType>
|
|
425
|
-
LLT<MatrixType,
|
|
426
|
-
|
|
427
|
-
check_template_parameters();
|
|
428
|
-
|
|
429
|
-
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());
|
|
430
401
|
const Index size = a.rows();
|
|
431
402
|
m_matrix.resize(size, size);
|
|
432
|
-
if (!internal::is_same_dense(m_matrix, a.derived()))
|
|
433
|
-
m_matrix = a.derived();
|
|
403
|
+
if (!internal::is_same_dense(m_matrix, a.derived())) m_matrix = a.derived();
|
|
434
404
|
|
|
435
405
|
// Compute matrix L1 norm = max abs column sum.
|
|
436
406
|
m_l1_norm = RealScalar(0);
|
|
437
407
|
// TODO move this code to SelfAdjointView
|
|
438
408
|
for (Index col = 0; col < size; ++col) {
|
|
439
409
|
RealScalar abs_col_sum;
|
|
440
|
-
if (
|
|
441
|
-
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>();
|
|
442
413
|
else
|
|
443
|
-
abs_col_sum =
|
|
444
|
-
|
|
445
|
-
|
|
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;
|
|
446
417
|
}
|
|
447
418
|
|
|
448
419
|
m_isInitialized = true;
|
|
@@ -453,18 +424,17 @@ LLT<MatrixType,_UpLo>& LLT<MatrixType,_UpLo>::compute(const EigenBase<InputType>
|
|
|
453
424
|
}
|
|
454
425
|
|
|
455
426
|
/** Performs a rank one update (or dowdate) of the current decomposition.
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
template<typename
|
|
461
|
-
template<typename VectorType>
|
|
462
|
-
LLT<
|
|
463
|
-
{
|
|
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) {
|
|
464
434
|
EIGEN_STATIC_ASSERT_VECTOR_ONLY(VectorType);
|
|
465
|
-
eigen_assert(v.size()==m_matrix.cols());
|
|
435
|
+
eigen_assert(v.size() == m_matrix.cols());
|
|
466
436
|
eigen_assert(m_isInitialized);
|
|
467
|
-
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)
|
|
468
438
|
m_info = NumericalIssue;
|
|
469
439
|
else
|
|
470
440
|
m_info = Success;
|
|
@@ -473,34 +443,40 @@ LLT<_MatrixType,_UpLo> LLT<_MatrixType,_UpLo>::rankUpdate(const VectorType& v, c
|
|
|
473
443
|
}
|
|
474
444
|
|
|
475
445
|
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
476
|
-
template<typename
|
|
477
|
-
template<typename RhsType, typename DstType>
|
|
478
|
-
void LLT<
|
|
479
|
-
|
|
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 {
|
|
449
|
+
_solve_impl_transposed<true>(rhs, dst);
|
|
450
|
+
}
|
|
451
|
+
|
|
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 {
|
|
480
455
|
dst = rhs;
|
|
481
|
-
|
|
456
|
+
|
|
457
|
+
matrixL().template conjugateIf<!Conjugate>().solveInPlace(dst);
|
|
458
|
+
matrixU().template conjugateIf<!Conjugate>().solveInPlace(dst);
|
|
482
459
|
}
|
|
483
460
|
#endif
|
|
484
461
|
|
|
485
462
|
/** \internal use x = llt_object.solve(x);
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
template<typename MatrixType, int
|
|
499
|
-
template<typename Derived>
|
|
500
|
-
void LLT<MatrixType,
|
|
501
|
-
{
|
|
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 {
|
|
502
478
|
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
503
|
-
eigen_assert(m_matrix.rows()==bAndX.rows());
|
|
479
|
+
eigen_assert(m_matrix.rows() == bAndX.rows());
|
|
504
480
|
matrixL().solveInPlace(bAndX);
|
|
505
481
|
matrixU().solveInPlace(bAndX);
|
|
506
482
|
}
|
|
@@ -508,35 +484,31 @@ void LLT<MatrixType,_UpLo>::solveInPlace(const MatrixBase<Derived> &bAndX) const
|
|
|
508
484
|
/** \returns the matrix represented by the decomposition,
|
|
509
485
|
* i.e., it returns the product: L L^*.
|
|
510
486
|
* This function is provided for debug purpose. */
|
|
511
|
-
template<typename MatrixType, int
|
|
512
|
-
MatrixType LLT<MatrixType,
|
|
513
|
-
{
|
|
487
|
+
template <typename MatrixType, int UpLo_>
|
|
488
|
+
MatrixType LLT<MatrixType, UpLo_>::reconstructedMatrix() const {
|
|
514
489
|
eigen_assert(m_isInitialized && "LLT is not initialized.");
|
|
515
490
|
return matrixL() * matrixL().adjoint().toDenseMatrix();
|
|
516
491
|
}
|
|
517
492
|
|
|
518
493
|
/** \cholesky_module
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
template<typename Derived>
|
|
523
|
-
inline const LLT<typename MatrixBase<Derived>::PlainObject>
|
|
524
|
-
MatrixBase<Derived>::llt() const
|
|
525
|
-
{
|
|
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 {
|
|
526
499
|
return LLT<PlainObject>(derived());
|
|
527
500
|
}
|
|
528
501
|
|
|
529
502
|
/** \cholesky_module
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
template<typename MatrixType, unsigned int UpLo>
|
|
534
|
-
inline const LLT<typename SelfAdjointView<MatrixType, UpLo>::PlainObject, UpLo>
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
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);
|
|
538
510
|
}
|
|
539
511
|
|
|
540
|
-
}
|
|
512
|
+
} // end namespace Eigen
|
|
541
513
|
|
|
542
|
-
#endif
|
|
514
|
+
#endif // EIGEN_LLT_H
|