ruby-eigen 0.0.9 → 0.0.10.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (293) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +22 -0
  3. data/README.md +21 -0
  4. data/ext/eigen/eigen3/COPYING.BSD +26 -0
  5. data/ext/eigen/eigen3/COPYING.MPL2 +373 -0
  6. data/ext/eigen/eigen3/COPYING.README +18 -0
  7. data/ext/eigen/eigen3/Eigen/Array +11 -0
  8. data/ext/eigen/eigen3/Eigen/Cholesky +32 -0
  9. data/ext/eigen/eigen3/Eigen/CholmodSupport +45 -0
  10. data/ext/eigen/eigen3/Eigen/Core +376 -0
  11. data/ext/eigen/eigen3/Eigen/Dense +7 -0
  12. data/ext/eigen/eigen3/Eigen/Eigen +2 -0
  13. data/ext/eigen/eigen3/Eigen/Eigen2Support +95 -0
  14. data/ext/eigen/eigen3/Eigen/Eigenvalues +48 -0
  15. data/ext/eigen/eigen3/Eigen/Geometry +63 -0
  16. data/ext/eigen/eigen3/Eigen/Householder +23 -0
  17. data/ext/eigen/eigen3/Eigen/IterativeLinearSolvers +40 -0
  18. data/ext/eigen/eigen3/Eigen/Jacobi +26 -0
  19. data/ext/eigen/eigen3/Eigen/LU +41 -0
  20. data/ext/eigen/eigen3/Eigen/LeastSquares +32 -0
  21. data/ext/eigen/eigen3/Eigen/MetisSupport +28 -0
  22. data/ext/eigen/eigen3/Eigen/PaStiXSupport +46 -0
  23. data/ext/eigen/eigen3/Eigen/PardisoSupport +30 -0
  24. data/ext/eigen/eigen3/Eigen/QR +45 -0
  25. data/ext/eigen/eigen3/Eigen/QtAlignedMalloc +34 -0
  26. data/ext/eigen/eigen3/Eigen/SPQRSupport +29 -0
  27. data/ext/eigen/eigen3/Eigen/SVD +37 -0
  28. data/ext/eigen/eigen3/Eigen/Sparse +27 -0
  29. data/ext/eigen/eigen3/Eigen/SparseCore +64 -0
  30. data/ext/eigen/eigen3/Eigen/SparseLU +49 -0
  31. data/ext/eigen/eigen3/Eigen/SparseQR +33 -0
  32. data/ext/eigen/eigen3/Eigen/StdDeque +27 -0
  33. data/ext/eigen/eigen3/Eigen/StdList +26 -0
  34. data/ext/eigen/eigen3/Eigen/StdVector +27 -0
  35. data/ext/eigen/eigen3/Eigen/SuperLUSupport +59 -0
  36. data/ext/eigen/eigen3/Eigen/UmfPackSupport +36 -0
  37. data/ext/eigen/eigen3/Eigen/src/Cholesky/LDLT.h +611 -0
  38. data/ext/eigen/eigen3/Eigen/src/Cholesky/LLT.h +498 -0
  39. data/ext/eigen/eigen3/Eigen/src/Cholesky/LLT_MKL.h +102 -0
  40. data/ext/eigen/eigen3/Eigen/src/CholmodSupport/CholmodSupport.h +607 -0
  41. data/ext/eigen/eigen3/Eigen/src/Core/Array.h +323 -0
  42. data/ext/eigen/eigen3/Eigen/src/Core/ArrayBase.h +226 -0
  43. data/ext/eigen/eigen3/Eigen/src/Core/ArrayWrapper.h +264 -0
  44. data/ext/eigen/eigen3/Eigen/src/Core/Assign.h +590 -0
  45. data/ext/eigen/eigen3/Eigen/src/Core/Assign_MKL.h +224 -0
  46. data/ext/eigen/eigen3/Eigen/src/Core/BandMatrix.h +334 -0
  47. data/ext/eigen/eigen3/Eigen/src/Core/Block.h +406 -0
  48. data/ext/eigen/eigen3/Eigen/src/Core/BooleanRedux.h +154 -0
  49. data/ext/eigen/eigen3/Eigen/src/Core/CommaInitializer.h +154 -0
  50. data/ext/eigen/eigen3/Eigen/src/Core/CoreIterators.h +61 -0
  51. data/ext/eigen/eigen3/Eigen/src/Core/CwiseBinaryOp.h +230 -0
  52. data/ext/eigen/eigen3/Eigen/src/Core/CwiseNullaryOp.h +864 -0
  53. data/ext/eigen/eigen3/Eigen/src/Core/CwiseUnaryOp.h +126 -0
  54. data/ext/eigen/eigen3/Eigen/src/Core/CwiseUnaryView.h +139 -0
  55. data/ext/eigen/eigen3/Eigen/src/Core/DenseBase.h +521 -0
  56. data/ext/eigen/eigen3/Eigen/src/Core/DenseCoeffsBase.h +754 -0
  57. data/ext/eigen/eigen3/Eigen/src/Core/DenseStorage.h +434 -0
  58. data/ext/eigen/eigen3/Eigen/src/Core/Diagonal.h +237 -0
  59. data/ext/eigen/eigen3/Eigen/src/Core/DiagonalMatrix.h +313 -0
  60. data/ext/eigen/eigen3/Eigen/src/Core/DiagonalProduct.h +131 -0
  61. data/ext/eigen/eigen3/Eigen/src/Core/Dot.h +263 -0
  62. data/ext/eigen/eigen3/Eigen/src/Core/EigenBase.h +131 -0
  63. data/ext/eigen/eigen3/Eigen/src/Core/Flagged.h +140 -0
  64. data/ext/eigen/eigen3/Eigen/src/Core/ForceAlignedAccess.h +146 -0
  65. data/ext/eigen/eigen3/Eigen/src/Core/Functors.h +1026 -0
  66. data/ext/eigen/eigen3/Eigen/src/Core/Fuzzy.h +150 -0
  67. data/ext/eigen/eigen3/Eigen/src/Core/GeneralProduct.h +635 -0
  68. data/ext/eigen/eigen3/Eigen/src/Core/GenericPacketMath.h +350 -0
  69. data/ext/eigen/eigen3/Eigen/src/Core/GlobalFunctions.h +92 -0
  70. data/ext/eigen/eigen3/Eigen/src/Core/IO.h +250 -0
  71. data/ext/eigen/eigen3/Eigen/src/Core/Map.h +192 -0
  72. data/ext/eigen/eigen3/Eigen/src/Core/MapBase.h +247 -0
  73. data/ext/eigen/eigen3/Eigen/src/Core/MathFunctions.h +768 -0
  74. data/ext/eigen/eigen3/Eigen/src/Core/Matrix.h +420 -0
  75. data/ext/eigen/eigen3/Eigen/src/Core/MatrixBase.h +563 -0
  76. data/ext/eigen/eigen3/Eigen/src/Core/NestByValue.h +111 -0
  77. data/ext/eigen/eigen3/Eigen/src/Core/NoAlias.h +134 -0
  78. data/ext/eigen/eigen3/Eigen/src/Core/NumTraits.h +150 -0
  79. data/ext/eigen/eigen3/Eigen/src/Core/PermutationMatrix.h +721 -0
  80. data/ext/eigen/eigen3/Eigen/src/Core/PlainObjectBase.h +822 -0
  81. data/ext/eigen/eigen3/Eigen/src/Core/ProductBase.h +290 -0
  82. data/ext/eigen/eigen3/Eigen/src/Core/Random.h +152 -0
  83. data/ext/eigen/eigen3/Eigen/src/Core/Redux.h +409 -0
  84. data/ext/eigen/eigen3/Eigen/src/Core/Ref.h +278 -0
  85. data/ext/eigen/eigen3/Eigen/src/Core/Replicate.h +177 -0
  86. data/ext/eigen/eigen3/Eigen/src/Core/ReturnByValue.h +99 -0
  87. data/ext/eigen/eigen3/Eigen/src/Core/Reverse.h +224 -0
  88. data/ext/eigen/eigen3/Eigen/src/Core/Select.h +162 -0
  89. data/ext/eigen/eigen3/Eigen/src/Core/SelfAdjointView.h +314 -0
  90. data/ext/eigen/eigen3/Eigen/src/Core/SelfCwiseBinaryOp.h +191 -0
  91. data/ext/eigen/eigen3/Eigen/src/Core/SolveTriangular.h +260 -0
  92. data/ext/eigen/eigen3/Eigen/src/Core/StableNorm.h +203 -0
  93. data/ext/eigen/eigen3/Eigen/src/Core/Stride.h +108 -0
  94. data/ext/eigen/eigen3/Eigen/src/Core/Swap.h +126 -0
  95. data/ext/eigen/eigen3/Eigen/src/Core/Transpose.h +419 -0
  96. data/ext/eigen/eigen3/Eigen/src/Core/Transpositions.h +436 -0
  97. data/ext/eigen/eigen3/Eigen/src/Core/TriangularMatrix.h +839 -0
  98. data/ext/eigen/eigen3/Eigen/src/Core/VectorBlock.h +95 -0
  99. data/ext/eigen/eigen3/Eigen/src/Core/VectorwiseOp.h +642 -0
  100. data/ext/eigen/eigen3/Eigen/src/Core/Visitor.h +237 -0
  101. data/ext/eigen/eigen3/Eigen/src/Core/arch/AltiVec/Complex.h +217 -0
  102. data/ext/eigen/eigen3/Eigen/src/Core/arch/AltiVec/PacketMath.h +501 -0
  103. data/ext/eigen/eigen3/Eigen/src/Core/arch/Default/Settings.h +49 -0
  104. data/ext/eigen/eigen3/Eigen/src/Core/arch/NEON/Complex.h +253 -0
  105. data/ext/eigen/eigen3/Eigen/src/Core/arch/NEON/PacketMath.h +420 -0
  106. data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/Complex.h +442 -0
  107. data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/MathFunctions.h +475 -0
  108. data/ext/eigen/eigen3/Eigen/src/Core/arch/SSE/PacketMath.h +649 -0
  109. data/ext/eigen/eigen3/Eigen/src/Core/products/CoeffBasedProduct.h +476 -0
  110. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1341 -0
  111. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix.h +427 -0
  112. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +278 -0
  113. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_MKL.h +146 -0
  114. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixMatrix_MKL.h +118 -0
  115. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixVector.h +566 -0
  116. data/ext/eigen/eigen3/Eigen/src/Core/products/GeneralMatrixVector_MKL.h +131 -0
  117. data/ext/eigen/eigen3/Eigen/src/Core/products/Parallelizer.h +162 -0
  118. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +436 -0
  119. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixMatrix_MKL.h +295 -0
  120. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector.h +281 -0
  121. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointMatrixVector_MKL.h +114 -0
  122. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointProduct.h +123 -0
  123. data/ext/eigen/eigen3/Eigen/src/Core/products/SelfadjointRank2Update.h +93 -0
  124. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix.h +427 -0
  125. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixMatrix_MKL.h +309 -0
  126. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixVector.h +348 -0
  127. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularMatrixVector_MKL.h +247 -0
  128. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverMatrix.h +332 -0
  129. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverMatrix_MKL.h +155 -0
  130. data/ext/eigen/eigen3/Eigen/src/Core/products/TriangularSolverVector.h +139 -0
  131. data/ext/eigen/eigen3/Eigen/src/Core/util/BlasUtil.h +264 -0
  132. data/ext/eigen/eigen3/Eigen/src/Core/util/Constants.h +451 -0
  133. data/ext/eigen/eigen3/Eigen/src/Core/util/DisableStupidWarnings.h +40 -0
  134. data/ext/eigen/eigen3/Eigen/src/Core/util/ForwardDeclarations.h +302 -0
  135. data/ext/eigen/eigen3/Eigen/src/Core/util/MKL_support.h +158 -0
  136. data/ext/eigen/eigen3/Eigen/src/Core/util/Macros.h +451 -0
  137. data/ext/eigen/eigen3/Eigen/src/Core/util/Memory.h +977 -0
  138. data/ext/eigen/eigen3/Eigen/src/Core/util/Meta.h +243 -0
  139. data/ext/eigen/eigen3/Eigen/src/Core/util/NonMPL2.h +3 -0
  140. data/ext/eigen/eigen3/Eigen/src/Core/util/ReenableStupidWarnings.h +14 -0
  141. data/ext/eigen/eigen3/Eigen/src/Core/util/StaticAssert.h +208 -0
  142. data/ext/eigen/eigen3/Eigen/src/Core/util/XprHelper.h +469 -0
  143. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Block.h +126 -0
  144. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Cwise.h +192 -0
  145. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/CwiseOperators.h +298 -0
  146. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/AlignedBox.h +159 -0
  147. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/All.h +115 -0
  148. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/AngleAxis.h +214 -0
  149. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Hyperplane.h +254 -0
  150. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/ParametrizedLine.h +141 -0
  151. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Quaternion.h +495 -0
  152. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Rotation2D.h +145 -0
  153. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/RotationBase.h +123 -0
  154. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Scaling.h +167 -0
  155. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Transform.h +786 -0
  156. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Geometry/Translation.h +184 -0
  157. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/LU.h +120 -0
  158. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Lazy.h +71 -0
  159. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/LeastSquares.h +169 -0
  160. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Macros.h +20 -0
  161. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/MathFunctions.h +57 -0
  162. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Memory.h +45 -0
  163. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Meta.h +75 -0
  164. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/Minor.h +117 -0
  165. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/QR.h +67 -0
  166. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/SVD.h +637 -0
  167. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/TriangularSolver.h +42 -0
  168. data/ext/eigen/eigen3/Eigen/src/Eigen2Support/VectorBlock.h +94 -0
  169. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexEigenSolver.h +341 -0
  170. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexSchur.h +456 -0
  171. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/ComplexSchur_MKL.h +94 -0
  172. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/EigenSolver.h +607 -0
  173. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +350 -0
  174. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +227 -0
  175. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/HessenbergDecomposition.h +373 -0
  176. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +160 -0
  177. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealQZ.h +624 -0
  178. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealSchur.h +525 -0
  179. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/RealSchur_MKL.h +83 -0
  180. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +801 -0
  181. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_MKL.h +92 -0
  182. data/ext/eigen/eigen3/Eigen/src/Eigenvalues/Tridiagonalization.h +557 -0
  183. data/ext/eigen/eigen3/Eigen/src/Geometry/AlignedBox.h +392 -0
  184. data/ext/eigen/eigen3/Eigen/src/Geometry/AngleAxis.h +233 -0
  185. data/ext/eigen/eigen3/Eigen/src/Geometry/EulerAngles.h +104 -0
  186. data/ext/eigen/eigen3/Eigen/src/Geometry/Homogeneous.h +307 -0
  187. data/ext/eigen/eigen3/Eigen/src/Geometry/Hyperplane.h +280 -0
  188. data/ext/eigen/eigen3/Eigen/src/Geometry/OrthoMethods.h +218 -0
  189. data/ext/eigen/eigen3/Eigen/src/Geometry/ParametrizedLine.h +195 -0
  190. data/ext/eigen/eigen3/Eigen/src/Geometry/Quaternion.h +776 -0
  191. data/ext/eigen/eigen3/Eigen/src/Geometry/Rotation2D.h +160 -0
  192. data/ext/eigen/eigen3/Eigen/src/Geometry/RotationBase.h +206 -0
  193. data/ext/eigen/eigen3/Eigen/src/Geometry/Scaling.h +166 -0
  194. data/ext/eigen/eigen3/Eigen/src/Geometry/Transform.h +1455 -0
  195. data/ext/eigen/eigen3/Eigen/src/Geometry/Translation.h +206 -0
  196. data/ext/eigen/eigen3/Eigen/src/Geometry/Umeyama.h +177 -0
  197. data/ext/eigen/eigen3/Eigen/src/Geometry/arch/Geometry_SSE.h +115 -0
  198. data/ext/eigen/eigen3/Eigen/src/Householder/BlockHouseholder.h +68 -0
  199. data/ext/eigen/eigen3/Eigen/src/Householder/Householder.h +171 -0
  200. data/ext/eigen/eigen3/Eigen/src/Householder/HouseholderSequence.h +441 -0
  201. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -0
  202. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +263 -0
  203. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +256 -0
  204. data/ext/eigen/eigen3/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +282 -0
  205. data/ext/eigen/eigen3/Eigen/src/Jacobi/Jacobi.h +433 -0
  206. data/ext/eigen/eigen3/Eigen/src/LU/Determinant.h +101 -0
  207. data/ext/eigen/eigen3/Eigen/src/LU/FullPivLU.h +751 -0
  208. data/ext/eigen/eigen3/Eigen/src/LU/Inverse.h +400 -0
  209. data/ext/eigen/eigen3/Eigen/src/LU/PartialPivLU.h +509 -0
  210. data/ext/eigen/eigen3/Eigen/src/LU/PartialPivLU_MKL.h +85 -0
  211. data/ext/eigen/eigen3/Eigen/src/LU/arch/Inverse_SSE.h +329 -0
  212. data/ext/eigen/eigen3/Eigen/src/MetisSupport/MetisSupport.h +137 -0
  213. data/ext/eigen/eigen3/Eigen/src/OrderingMethods/Amd.h +444 -0
  214. data/ext/eigen/eigen3/Eigen/src/OrderingMethods/Eigen_Colamd.h +1850 -0
  215. data/ext/eigen/eigen3/Eigen/src/PaStiXSupport/PaStiXSupport.h +721 -0
  216. data/ext/eigen/eigen3/Eigen/src/PardisoSupport/PardisoSupport.h +592 -0
  217. data/ext/eigen/eigen3/Eigen/src/QR/ColPivHouseholderQR.h +580 -0
  218. data/ext/eigen/eigen3/Eigen/src/QR/ColPivHouseholderQR_MKL.h +99 -0
  219. data/ext/eigen/eigen3/Eigen/src/QR/FullPivHouseholderQR.h +622 -0
  220. data/ext/eigen/eigen3/Eigen/src/QR/HouseholderQR.h +388 -0
  221. data/ext/eigen/eigen3/Eigen/src/QR/HouseholderQR_MKL.h +71 -0
  222. data/ext/eigen/eigen3/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +338 -0
  223. data/ext/eigen/eigen3/Eigen/src/SVD/JacobiSVD.h +976 -0
  224. data/ext/eigen/eigen3/Eigen/src/SVD/JacobiSVD_MKL.h +92 -0
  225. data/ext/eigen/eigen3/Eigen/src/SVD/UpperBidiagonalization.h +148 -0
  226. data/ext/eigen/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky.h +671 -0
  227. data/ext/eigen/eigen3/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +199 -0
  228. data/ext/eigen/eigen3/Eigen/src/SparseCore/AmbiVector.h +373 -0
  229. data/ext/eigen/eigen3/Eigen/src/SparseCore/CompressedStorage.h +233 -0
  230. data/ext/eigen/eigen3/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +245 -0
  231. data/ext/eigen/eigen3/Eigen/src/SparseCore/MappedSparseMatrix.h +181 -0
  232. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseBlock.h +537 -0
  233. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseColEtree.h +206 -0
  234. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +325 -0
  235. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +163 -0
  236. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDenseProduct.h +311 -0
  237. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDiagonalProduct.h +196 -0
  238. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseDot.h +101 -0
  239. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseFuzzy.h +26 -0
  240. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrix.h +1262 -0
  241. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrixBase.h +461 -0
  242. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparsePermutation.h +148 -0
  243. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseProduct.h +188 -0
  244. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseRedux.h +45 -0
  245. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseSelfAdjointView.h +507 -0
  246. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +150 -0
  247. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseTranspose.h +63 -0
  248. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseTriangularView.h +179 -0
  249. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseUtil.h +172 -0
  250. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseVector.h +448 -0
  251. data/ext/eigen/eigen3/Eigen/src/SparseCore/SparseView.h +99 -0
  252. data/ext/eigen/eigen3/Eigen/src/SparseCore/TriangularSolver.h +334 -0
  253. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU.h +806 -0
  254. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLUImpl.h +66 -0
  255. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Memory.h +227 -0
  256. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Structs.h +111 -0
  257. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +298 -0
  258. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_Utils.h +80 -0
  259. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_column_bmod.h +180 -0
  260. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_column_dfs.h +177 -0
  261. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +106 -0
  262. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +279 -0
  263. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +127 -0
  264. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +130 -0
  265. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_panel_bmod.h +223 -0
  266. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_panel_dfs.h +258 -0
  267. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_pivotL.h +137 -0
  268. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_pruneL.h +135 -0
  269. data/ext/eigen/eigen3/Eigen/src/SparseLU/SparseLU_relax_snode.h +83 -0
  270. data/ext/eigen/eigen3/Eigen/src/SparseQR/SparseQR.h +714 -0
  271. data/ext/eigen/eigen3/Eigen/src/StlSupport/StdDeque.h +134 -0
  272. data/ext/eigen/eigen3/Eigen/src/StlSupport/StdList.h +114 -0
  273. data/ext/eigen/eigen3/Eigen/src/StlSupport/StdVector.h +126 -0
  274. data/ext/eigen/eigen3/Eigen/src/StlSupport/details.h +84 -0
  275. data/ext/eigen/eigen3/Eigen/src/SuperLUSupport/SuperLUSupport.h +1026 -0
  276. data/ext/eigen/eigen3/Eigen/src/UmfPackSupport/UmfPackSupport.h +474 -0
  277. data/ext/eigen/eigen3/Eigen/src/misc/Image.h +84 -0
  278. data/ext/eigen/eigen3/Eigen/src/misc/Kernel.h +81 -0
  279. data/ext/eigen/eigen3/Eigen/src/misc/Solve.h +76 -0
  280. data/ext/eigen/eigen3/Eigen/src/misc/SparseSolve.h +128 -0
  281. data/ext/eigen/eigen3/Eigen/src/misc/blas.h +658 -0
  282. data/ext/eigen/eigen3/Eigen/src/plugins/ArrayCwiseBinaryOps.h +253 -0
  283. data/ext/eigen/eigen3/Eigen/src/plugins/ArrayCwiseUnaryOps.h +187 -0
  284. data/ext/eigen/eigen3/Eigen/src/plugins/BlockMethods.h +935 -0
  285. data/ext/eigen/eigen3/Eigen/src/plugins/CommonCwiseBinaryOps.h +46 -0
  286. data/ext/eigen/eigen3/Eigen/src/plugins/CommonCwiseUnaryOps.h +172 -0
  287. data/ext/eigen/eigen3/Eigen/src/plugins/MatrixCwiseBinaryOps.h +143 -0
  288. data/ext/eigen/eigen3/Eigen/src/plugins/MatrixCwiseUnaryOps.h +52 -0
  289. data/ext/eigen/eigen3/signature_of_eigen3_matrix_library +1 -0
  290. data/ext/eigen/eigen_wrap.cxx +19420 -10396
  291. data/ext/eigen/extconf.rb +37 -2
  292. data/lib/eigen.rb +146 -3
  293. metadata +294 -7
@@ -0,0 +1,350 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2012 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ // Copyright (C) 2010,2012 Jitse Niesen <jitse@maths.leeds.ac.uk>
6
+ //
7
+ // This Source Code Form is subject to the terms of the Mozilla
8
+ // Public License v. 2.0. If a copy of the MPL was not distributed
9
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
+
11
+ #ifndef EIGEN_GENERALIZEDEIGENSOLVER_H
12
+ #define EIGEN_GENERALIZEDEIGENSOLVER_H
13
+
14
+ #include "./RealQZ.h"
15
+
16
+ namespace Eigen {
17
+
18
+ /** \eigenvalues_module \ingroup Eigenvalues_Module
19
+ *
20
+ *
21
+ * \class GeneralizedEigenSolver
22
+ *
23
+ * \brief Computes the generalized eigenvalues and eigenvectors of a pair of general matrices
24
+ *
25
+ * \tparam _MatrixType the type of the matrices of which we are computing the
26
+ * eigen-decomposition; this is expected to be an instantiation of the Matrix
27
+ * class template. Currently, only real matrices are supported.
28
+ *
29
+ * The generalized eigenvalues and eigenvectors of a matrix pair \f$ A \f$ and \f$ B \f$ are scalars
30
+ * \f$ \lambda \f$ and vectors \f$ v \f$ such that \f$ Av = \lambda Bv \f$. If
31
+ * \f$ D \f$ is a diagonal matrix with the eigenvalues on the diagonal, and
32
+ * \f$ V \f$ is a matrix with the eigenvectors as its columns, then \f$ A V =
33
+ * B V D \f$. The matrix \f$ V \f$ is almost always invertible, in which case we
34
+ * have \f$ A = B V D V^{-1} \f$. This is called the generalized eigen-decomposition.
35
+ *
36
+ * The generalized eigenvalues and eigenvectors of a matrix pair may be complex, even when the
37
+ * matrices are real. Moreover, the generalized eigenvalue might be infinite if the matrix B is
38
+ * singular. To workaround this difficulty, the eigenvalues are provided as a pair of complex \f$ \alpha \f$
39
+ * and real \f$ \beta \f$ such that: \f$ \lambda_i = \alpha_i / \beta_i \f$. If \f$ \beta_i \f$ is (nearly) zero,
40
+ * then one can consider the well defined left eigenvalue \f$ \mu = \beta_i / \alpha_i\f$ such that:
41
+ * \f$ \mu_i A v_i = B v_i \f$, or even \f$ \mu_i u_i^T A = u_i^T B \f$ where \f$ u_i \f$ is
42
+ * called the left eigenvector.
43
+ *
44
+ * Call the function compute() to compute the generalized eigenvalues and eigenvectors of
45
+ * a given matrix pair. Alternatively, you can use the
46
+ * GeneralizedEigenSolver(const MatrixType&, const MatrixType&, bool) constructor which computes the
47
+ * eigenvalues and eigenvectors at construction time. Once the eigenvalue and
48
+ * eigenvectors are computed, they can be retrieved with the eigenvalues() and
49
+ * eigenvectors() functions.
50
+ *
51
+ * Here is an usage example of this class:
52
+ * Example: \include GeneralizedEigenSolver.cpp
53
+ * Output: \verbinclude GeneralizedEigenSolver.out
54
+ *
55
+ * \sa MatrixBase::eigenvalues(), class ComplexEigenSolver, class SelfAdjointEigenSolver
56
+ */
57
+ template<typename _MatrixType> class GeneralizedEigenSolver
58
+ {
59
+ public:
60
+
61
+ /** \brief Synonym for the template parameter \p _MatrixType. */
62
+ typedef _MatrixType MatrixType;
63
+
64
+ enum {
65
+ RowsAtCompileTime = MatrixType::RowsAtCompileTime,
66
+ ColsAtCompileTime = MatrixType::ColsAtCompileTime,
67
+ Options = MatrixType::Options,
68
+ MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
69
+ MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime
70
+ };
71
+
72
+ /** \brief Scalar type for matrices of type #MatrixType. */
73
+ typedef typename MatrixType::Scalar Scalar;
74
+ typedef typename NumTraits<Scalar>::Real RealScalar;
75
+ typedef typename MatrixType::Index Index;
76
+
77
+ /** \brief Complex scalar type for #MatrixType.
78
+ *
79
+ * This is \c std::complex<Scalar> if #Scalar is real (e.g.,
80
+ * \c float or \c double) and just \c Scalar if #Scalar is
81
+ * complex.
82
+ */
83
+ typedef std::complex<RealScalar> ComplexScalar;
84
+
85
+ /** \brief Type for vector of real scalar values eigenvalues as returned by betas().
86
+ *
87
+ * This is a column vector with entries of type #Scalar.
88
+ * The length of the vector is the size of #MatrixType.
89
+ */
90
+ typedef Matrix<Scalar, ColsAtCompileTime, 1, Options & ~RowMajor, MaxColsAtCompileTime, 1> VectorType;
91
+
92
+ /** \brief Type for vector of complex scalar values eigenvalues as returned by betas().
93
+ *
94
+ * This is a column vector with entries of type #ComplexScalar.
95
+ * The length of the vector is the size of #MatrixType.
96
+ */
97
+ typedef Matrix<ComplexScalar, ColsAtCompileTime, 1, Options & ~RowMajor, MaxColsAtCompileTime, 1> ComplexVectorType;
98
+
99
+ /** \brief Expression type for the eigenvalues as returned by eigenvalues().
100
+ */
101
+ typedef CwiseBinaryOp<internal::scalar_quotient_op<ComplexScalar,Scalar>,ComplexVectorType,VectorType> EigenvalueType;
102
+
103
+ /** \brief Type for matrix of eigenvectors as returned by eigenvectors().
104
+ *
105
+ * This is a square matrix with entries of type #ComplexScalar.
106
+ * The size is the same as the size of #MatrixType.
107
+ */
108
+ typedef Matrix<ComplexScalar, RowsAtCompileTime, ColsAtCompileTime, Options, MaxRowsAtCompileTime, MaxColsAtCompileTime> EigenvectorsType;
109
+
110
+ /** \brief Default constructor.
111
+ *
112
+ * The default constructor is useful in cases in which the user intends to
113
+ * perform decompositions via EigenSolver::compute(const MatrixType&, bool).
114
+ *
115
+ * \sa compute() for an example.
116
+ */
117
+ GeneralizedEigenSolver() : m_eivec(), m_alphas(), m_betas(), m_isInitialized(false), m_realQZ(), m_matS(), m_tmp() {}
118
+
119
+ /** \brief Default constructor with memory preallocation
120
+ *
121
+ * Like the default constructor but with preallocation of the internal data
122
+ * according to the specified problem \a size.
123
+ * \sa GeneralizedEigenSolver()
124
+ */
125
+ GeneralizedEigenSolver(Index size)
126
+ : m_eivec(size, size),
127
+ m_alphas(size),
128
+ m_betas(size),
129
+ m_isInitialized(false),
130
+ m_eigenvectorsOk(false),
131
+ m_realQZ(size),
132
+ m_matS(size, size),
133
+ m_tmp(size)
134
+ {}
135
+
136
+ /** \brief Constructor; computes the generalized eigendecomposition of given matrix pair.
137
+ *
138
+ * \param[in] A Square matrix whose eigendecomposition is to be computed.
139
+ * \param[in] B Square matrix whose eigendecomposition is to be computed.
140
+ * \param[in] computeEigenvectors If true, both the eigenvectors and the
141
+ * eigenvalues are computed; if false, only the eigenvalues are computed.
142
+ *
143
+ * This constructor calls compute() to compute the generalized eigenvalues
144
+ * and eigenvectors.
145
+ *
146
+ * \sa compute()
147
+ */
148
+ GeneralizedEigenSolver(const MatrixType& A, const MatrixType& B, bool computeEigenvectors = true)
149
+ : m_eivec(A.rows(), A.cols()),
150
+ m_alphas(A.cols()),
151
+ m_betas(A.cols()),
152
+ m_isInitialized(false),
153
+ m_eigenvectorsOk(false),
154
+ m_realQZ(A.cols()),
155
+ m_matS(A.rows(), A.cols()),
156
+ m_tmp(A.cols())
157
+ {
158
+ compute(A, B, computeEigenvectors);
159
+ }
160
+
161
+ /* \brief Returns the computed generalized eigenvectors.
162
+ *
163
+ * \returns %Matrix whose columns are the (possibly complex) eigenvectors.
164
+ *
165
+ * \pre Either the constructor
166
+ * GeneralizedEigenSolver(const MatrixType&,const MatrixType&, bool) or the member function
167
+ * compute(const MatrixType&, const MatrixType& bool) has been called before, and
168
+ * \p computeEigenvectors was set to true (the default).
169
+ *
170
+ * Column \f$ k \f$ of the returned matrix is an eigenvector corresponding
171
+ * to eigenvalue number \f$ k \f$ as returned by eigenvalues(). The
172
+ * eigenvectors are normalized to have (Euclidean) norm equal to one. The
173
+ * matrix returned by this function is the matrix \f$ V \f$ in the
174
+ * generalized eigendecomposition \f$ A = B V D V^{-1} \f$, if it exists.
175
+ *
176
+ * \sa eigenvalues()
177
+ */
178
+ // EigenvectorsType eigenvectors() const;
179
+
180
+ /** \brief Returns an expression of the computed generalized eigenvalues.
181
+ *
182
+ * \returns An expression of the column vector containing the eigenvalues.
183
+ *
184
+ * It is a shortcut for \code this->alphas().cwiseQuotient(this->betas()); \endcode
185
+ * Not that betas might contain zeros. It is therefore not recommended to use this function,
186
+ * but rather directly deal with the alphas and betas vectors.
187
+ *
188
+ * \pre Either the constructor
189
+ * GeneralizedEigenSolver(const MatrixType&,const MatrixType&,bool) or the member function
190
+ * compute(const MatrixType&,const MatrixType&,bool) has been called before.
191
+ *
192
+ * The eigenvalues are repeated according to their algebraic multiplicity,
193
+ * so there are as many eigenvalues as rows in the matrix. The eigenvalues
194
+ * are not sorted in any particular order.
195
+ *
196
+ * \sa alphas(), betas(), eigenvectors()
197
+ */
198
+ EigenvalueType eigenvalues() const
199
+ {
200
+ eigen_assert(m_isInitialized && "GeneralizedEigenSolver is not initialized.");
201
+ return EigenvalueType(m_alphas,m_betas);
202
+ }
203
+
204
+ /** \returns A const reference to the vectors containing the alpha values
205
+ *
206
+ * This vector permits to reconstruct the j-th eigenvalues as alphas(i)/betas(j).
207
+ *
208
+ * \sa betas(), eigenvalues() */
209
+ ComplexVectorType alphas() const
210
+ {
211
+ eigen_assert(m_isInitialized && "GeneralizedEigenSolver is not initialized.");
212
+ return m_alphas;
213
+ }
214
+
215
+ /** \returns A const reference to the vectors containing the beta values
216
+ *
217
+ * This vector permits to reconstruct the j-th eigenvalues as alphas(i)/betas(j).
218
+ *
219
+ * \sa alphas(), eigenvalues() */
220
+ VectorType betas() const
221
+ {
222
+ eigen_assert(m_isInitialized && "GeneralizedEigenSolver is not initialized.");
223
+ return m_betas;
224
+ }
225
+
226
+ /** \brief Computes generalized eigendecomposition of given matrix.
227
+ *
228
+ * \param[in] A Square matrix whose eigendecomposition is to be computed.
229
+ * \param[in] B Square matrix whose eigendecomposition is to be computed.
230
+ * \param[in] computeEigenvectors If true, both the eigenvectors and the
231
+ * eigenvalues are computed; if false, only the eigenvalues are
232
+ * computed.
233
+ * \returns Reference to \c *this
234
+ *
235
+ * This function computes the eigenvalues of the real matrix \p matrix.
236
+ * The eigenvalues() function can be used to retrieve them. If
237
+ * \p computeEigenvectors is true, then the eigenvectors are also computed
238
+ * and can be retrieved by calling eigenvectors().
239
+ *
240
+ * The matrix is first reduced to real generalized Schur form using the RealQZ
241
+ * class. The generalized Schur decomposition is then used to compute the eigenvalues
242
+ * and eigenvectors.
243
+ *
244
+ * The cost of the computation is dominated by the cost of the
245
+ * generalized Schur decomposition.
246
+ *
247
+ * This method reuses of the allocated data in the GeneralizedEigenSolver object.
248
+ */
249
+ GeneralizedEigenSolver& compute(const MatrixType& A, const MatrixType& B, bool computeEigenvectors = true);
250
+
251
+ ComputationInfo info() const
252
+ {
253
+ eigen_assert(m_isInitialized && "EigenSolver is not initialized.");
254
+ return m_realQZ.info();
255
+ }
256
+
257
+ /** Sets the maximal number of iterations allowed.
258
+ */
259
+ GeneralizedEigenSolver& setMaxIterations(Index maxIters)
260
+ {
261
+ m_realQZ.setMaxIterations(maxIters);
262
+ return *this;
263
+ }
264
+
265
+ protected:
266
+
267
+ static void check_template_parameters()
268
+ {
269
+ EIGEN_STATIC_ASSERT_NON_INTEGER(Scalar);
270
+ EIGEN_STATIC_ASSERT(!NumTraits<Scalar>::IsComplex, NUMERIC_TYPE_MUST_BE_REAL);
271
+ }
272
+
273
+ MatrixType m_eivec;
274
+ ComplexVectorType m_alphas;
275
+ VectorType m_betas;
276
+ bool m_isInitialized;
277
+ bool m_eigenvectorsOk;
278
+ RealQZ<MatrixType> m_realQZ;
279
+ MatrixType m_matS;
280
+
281
+ typedef Matrix<Scalar, ColsAtCompileTime, 1, Options & ~RowMajor, MaxColsAtCompileTime, 1> ColumnVectorType;
282
+ ColumnVectorType m_tmp;
283
+ };
284
+
285
+ //template<typename MatrixType>
286
+ //typename GeneralizedEigenSolver<MatrixType>::EigenvectorsType GeneralizedEigenSolver<MatrixType>::eigenvectors() const
287
+ //{
288
+ // eigen_assert(m_isInitialized && "EigenSolver is not initialized.");
289
+ // eigen_assert(m_eigenvectorsOk && "The eigenvectors have not been computed together with the eigenvalues.");
290
+ // Index n = m_eivec.cols();
291
+ // EigenvectorsType matV(n,n);
292
+ // // TODO
293
+ // return matV;
294
+ //}
295
+
296
+ template<typename MatrixType>
297
+ GeneralizedEigenSolver<MatrixType>&
298
+ GeneralizedEigenSolver<MatrixType>::compute(const MatrixType& A, const MatrixType& B, bool computeEigenvectors)
299
+ {
300
+ check_template_parameters();
301
+
302
+ using std::sqrt;
303
+ using std::abs;
304
+ eigen_assert(A.cols() == A.rows() && B.cols() == A.rows() && B.cols() == B.rows());
305
+
306
+ // Reduce to generalized real Schur form:
307
+ // A = Q S Z and B = Q T Z
308
+ m_realQZ.compute(A, B, computeEigenvectors);
309
+
310
+ if (m_realQZ.info() == Success)
311
+ {
312
+ m_matS = m_realQZ.matrixS();
313
+ if (computeEigenvectors)
314
+ m_eivec = m_realQZ.matrixZ().transpose();
315
+
316
+ // Compute eigenvalues from matS
317
+ m_alphas.resize(A.cols());
318
+ m_betas.resize(A.cols());
319
+ Index i = 0;
320
+ while (i < A.cols())
321
+ {
322
+ if (i == A.cols() - 1 || m_matS.coeff(i+1, i) == Scalar(0))
323
+ {
324
+ m_alphas.coeffRef(i) = m_matS.coeff(i, i);
325
+ m_betas.coeffRef(i) = m_realQZ.matrixT().coeff(i,i);
326
+ ++i;
327
+ }
328
+ else
329
+ {
330
+ Scalar p = Scalar(0.5) * (m_matS.coeff(i, i) - m_matS.coeff(i+1, i+1));
331
+ Scalar z = sqrt(abs(p * p + m_matS.coeff(i+1, i) * m_matS.coeff(i, i+1)));
332
+ m_alphas.coeffRef(i) = ComplexScalar(m_matS.coeff(i+1, i+1) + p, z);
333
+ m_alphas.coeffRef(i+1) = ComplexScalar(m_matS.coeff(i+1, i+1) + p, -z);
334
+
335
+ m_betas.coeffRef(i) = m_realQZ.matrixT().coeff(i,i);
336
+ m_betas.coeffRef(i+1) = m_realQZ.matrixT().coeff(i,i);
337
+ i += 2;
338
+ }
339
+ }
340
+ }
341
+
342
+ m_isInitialized = true;
343
+ m_eigenvectorsOk = false;//computeEigenvectors;
344
+
345
+ return *this;
346
+ }
347
+
348
+ } // end namespace Eigen
349
+
350
+ #endif // EIGEN_GENERALIZEDEIGENSOLVER_H
@@ -0,0 +1,227 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr>
5
+ // Copyright (C) 2010 Jitse Niesen <jitse@maths.leeds.ac.uk>
6
+ //
7
+ // This Source Code Form is subject to the terms of the Mozilla
8
+ // Public License v. 2.0. If a copy of the MPL was not distributed
9
+ // with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
10
+
11
+ #ifndef EIGEN_GENERALIZEDSELFADJOINTEIGENSOLVER_H
12
+ #define EIGEN_GENERALIZEDSELFADJOINTEIGENSOLVER_H
13
+
14
+ #include "./Tridiagonalization.h"
15
+
16
+ namespace Eigen {
17
+
18
+ /** \eigenvalues_module \ingroup Eigenvalues_Module
19
+ *
20
+ *
21
+ * \class GeneralizedSelfAdjointEigenSolver
22
+ *
23
+ * \brief Computes eigenvalues and eigenvectors of the generalized selfadjoint eigen problem
24
+ *
25
+ * \tparam _MatrixType the type of the matrix of which we are computing the
26
+ * eigendecomposition; this is expected to be an instantiation of the Matrix
27
+ * class template.
28
+ *
29
+ * This class solves the generalized eigenvalue problem
30
+ * \f$ Av = \lambda Bv \f$. In this case, the matrix \f$ A \f$ should be
31
+ * selfadjoint and the matrix \f$ B \f$ should be positive definite.
32
+ *
33
+ * Only the \b lower \b triangular \b part of the input matrix is referenced.
34
+ *
35
+ * Call the function compute() to compute the eigenvalues and eigenvectors of
36
+ * a given matrix. Alternatively, you can use the
37
+ * GeneralizedSelfAdjointEigenSolver(const MatrixType&, const MatrixType&, int)
38
+ * constructor which computes the eigenvalues and eigenvectors at construction time.
39
+ * Once the eigenvalue and eigenvectors are computed, they can be retrieved with the eigenvalues()
40
+ * and eigenvectors() functions.
41
+ *
42
+ * The documentation for GeneralizedSelfAdjointEigenSolver(const MatrixType&, const MatrixType&, int)
43
+ * contains an example of the typical use of this class.
44
+ *
45
+ * \sa class SelfAdjointEigenSolver, class EigenSolver, class ComplexEigenSolver
46
+ */
47
+ template<typename _MatrixType>
48
+ class GeneralizedSelfAdjointEigenSolver : public SelfAdjointEigenSolver<_MatrixType>
49
+ {
50
+ typedef SelfAdjointEigenSolver<_MatrixType> Base;
51
+ public:
52
+
53
+ typedef typename Base::Index Index;
54
+ typedef _MatrixType MatrixType;
55
+
56
+ /** \brief Default constructor for fixed-size matrices.
57
+ *
58
+ * The default constructor is useful in cases in which the user intends to
59
+ * perform decompositions via compute(). This constructor
60
+ * can only be used if \p _MatrixType is a fixed-size matrix; use
61
+ * GeneralizedSelfAdjointEigenSolver(Index) for dynamic-size matrices.
62
+ */
63
+ GeneralizedSelfAdjointEigenSolver() : Base() {}
64
+
65
+ /** \brief Constructor, pre-allocates memory for dynamic-size matrices.
66
+ *
67
+ * \param [in] size Positive integer, size of the matrix whose
68
+ * eigenvalues and eigenvectors will be computed.
69
+ *
70
+ * This constructor is useful for dynamic-size matrices, when the user
71
+ * intends to perform decompositions via compute(). The \p size
72
+ * parameter is only used as a hint. It is not an error to give a wrong
73
+ * \p size, but it may impair performance.
74
+ *
75
+ * \sa compute() for an example
76
+ */
77
+ GeneralizedSelfAdjointEigenSolver(Index size)
78
+ : Base(size)
79
+ {}
80
+
81
+ /** \brief Constructor; computes generalized eigendecomposition of given matrix pencil.
82
+ *
83
+ * \param[in] matA Selfadjoint matrix in matrix pencil.
84
+ * Only the lower triangular part of the matrix is referenced.
85
+ * \param[in] matB Positive-definite matrix in matrix pencil.
86
+ * Only the lower triangular part of the matrix is referenced.
87
+ * \param[in] options A or-ed set of flags {#ComputeEigenvectors,#EigenvaluesOnly} | {#Ax_lBx,#ABx_lx,#BAx_lx}.
88
+ * Default is #ComputeEigenvectors|#Ax_lBx.
89
+ *
90
+ * This constructor calls compute(const MatrixType&, const MatrixType&, int)
91
+ * to compute the eigenvalues and (if requested) the eigenvectors of the
92
+ * generalized eigenproblem \f$ Ax = \lambda B x \f$ with \a matA the
93
+ * selfadjoint matrix \f$ A \f$ and \a matB the positive definite matrix
94
+ * \f$ B \f$. Each eigenvector \f$ x \f$ satisfies the property
95
+ * \f$ x^* B x = 1 \f$. The eigenvectors are computed if
96
+ * \a options contains ComputeEigenvectors.
97
+ *
98
+ * In addition, the two following variants can be solved via \p options:
99
+ * - \c ABx_lx: \f$ ABx = \lambda x \f$
100
+ * - \c BAx_lx: \f$ BAx = \lambda x \f$
101
+ *
102
+ * Example: \include SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType2.cpp
103
+ * Output: \verbinclude SelfAdjointEigenSolver_SelfAdjointEigenSolver_MatrixType2.out
104
+ *
105
+ * \sa compute(const MatrixType&, const MatrixType&, int)
106
+ */
107
+ GeneralizedSelfAdjointEigenSolver(const MatrixType& matA, const MatrixType& matB,
108
+ int options = ComputeEigenvectors|Ax_lBx)
109
+ : Base(matA.cols())
110
+ {
111
+ compute(matA, matB, options);
112
+ }
113
+
114
+ /** \brief Computes generalized eigendecomposition of given matrix pencil.
115
+ *
116
+ * \param[in] matA Selfadjoint matrix in matrix pencil.
117
+ * Only the lower triangular part of the matrix is referenced.
118
+ * \param[in] matB Positive-definite matrix in matrix pencil.
119
+ * Only the lower triangular part of the matrix is referenced.
120
+ * \param[in] options A or-ed set of flags {#ComputeEigenvectors,#EigenvaluesOnly} | {#Ax_lBx,#ABx_lx,#BAx_lx}.
121
+ * Default is #ComputeEigenvectors|#Ax_lBx.
122
+ *
123
+ * \returns Reference to \c *this
124
+ *
125
+ * Accoring to \p options, this function computes eigenvalues and (if requested)
126
+ * the eigenvectors of one of the following three generalized eigenproblems:
127
+ * - \c Ax_lBx: \f$ Ax = \lambda B x \f$
128
+ * - \c ABx_lx: \f$ ABx = \lambda x \f$
129
+ * - \c BAx_lx: \f$ BAx = \lambda x \f$
130
+ * with \a matA the selfadjoint matrix \f$ A \f$ and \a matB the positive definite
131
+ * matrix \f$ B \f$.
132
+ * In addition, each eigenvector \f$ x \f$ satisfies the property \f$ x^* B x = 1 \f$.
133
+ *
134
+ * The eigenvalues() function can be used to retrieve
135
+ * the eigenvalues. If \p options contains ComputeEigenvectors, then the
136
+ * eigenvectors are also computed and can be retrieved by calling
137
+ * eigenvectors().
138
+ *
139
+ * The implementation uses LLT to compute the Cholesky decomposition
140
+ * \f$ B = LL^* \f$ and computes the classical eigendecomposition
141
+ * of the selfadjoint matrix \f$ L^{-1} A (L^*)^{-1} \f$ if \p options contains Ax_lBx
142
+ * and of \f$ L^{*} A L \f$ otherwise. This solves the
143
+ * generalized eigenproblem, because any solution of the generalized
144
+ * eigenproblem \f$ Ax = \lambda B x \f$ corresponds to a solution
145
+ * \f$ L^{-1} A (L^*)^{-1} (L^* x) = \lambda (L^* x) \f$ of the
146
+ * eigenproblem for \f$ L^{-1} A (L^*)^{-1} \f$. Similar statements
147
+ * can be made for the two other variants.
148
+ *
149
+ * Example: \include SelfAdjointEigenSolver_compute_MatrixType2.cpp
150
+ * Output: \verbinclude SelfAdjointEigenSolver_compute_MatrixType2.out
151
+ *
152
+ * \sa GeneralizedSelfAdjointEigenSolver(const MatrixType&, const MatrixType&, int)
153
+ */
154
+ GeneralizedSelfAdjointEigenSolver& compute(const MatrixType& matA, const MatrixType& matB,
155
+ int options = ComputeEigenvectors|Ax_lBx);
156
+
157
+ protected:
158
+
159
+ };
160
+
161
+
162
+ template<typename MatrixType>
163
+ GeneralizedSelfAdjointEigenSolver<MatrixType>& GeneralizedSelfAdjointEigenSolver<MatrixType>::
164
+ compute(const MatrixType& matA, const MatrixType& matB, int options)
165
+ {
166
+ eigen_assert(matA.cols()==matA.rows() && matB.rows()==matA.rows() && matB.cols()==matB.rows());
167
+ eigen_assert((options&~(EigVecMask|GenEigMask))==0
168
+ && (options&EigVecMask)!=EigVecMask
169
+ && ((options&GenEigMask)==0 || (options&GenEigMask)==Ax_lBx
170
+ || (options&GenEigMask)==ABx_lx || (options&GenEigMask)==BAx_lx)
171
+ && "invalid option parameter");
172
+
173
+ bool computeEigVecs = ((options&EigVecMask)==0) || ((options&EigVecMask)==ComputeEigenvectors);
174
+
175
+ // Compute the cholesky decomposition of matB = L L' = U'U
176
+ LLT<MatrixType> cholB(matB);
177
+
178
+ int type = (options&GenEigMask);
179
+ if(type==0)
180
+ type = Ax_lBx;
181
+
182
+ if(type==Ax_lBx)
183
+ {
184
+ // compute C = inv(L) A inv(L')
185
+ MatrixType matC = matA.template selfadjointView<Lower>();
186
+ cholB.matrixL().template solveInPlace<OnTheLeft>(matC);
187
+ cholB.matrixU().template solveInPlace<OnTheRight>(matC);
188
+
189
+ Base::compute(matC, computeEigVecs ? ComputeEigenvectors : EigenvaluesOnly );
190
+
191
+ // transform back the eigen vectors: evecs = inv(U) * evecs
192
+ if(computeEigVecs)
193
+ cholB.matrixU().solveInPlace(Base::m_eivec);
194
+ }
195
+ else if(type==ABx_lx)
196
+ {
197
+ // compute C = L' A L
198
+ MatrixType matC = matA.template selfadjointView<Lower>();
199
+ matC = matC * cholB.matrixL();
200
+ matC = cholB.matrixU() * matC;
201
+
202
+ Base::compute(matC, computeEigVecs ? ComputeEigenvectors : EigenvaluesOnly);
203
+
204
+ // transform back the eigen vectors: evecs = inv(U) * evecs
205
+ if(computeEigVecs)
206
+ cholB.matrixU().solveInPlace(Base::m_eivec);
207
+ }
208
+ else if(type==BAx_lx)
209
+ {
210
+ // compute C = L' A L
211
+ MatrixType matC = matA.template selfadjointView<Lower>();
212
+ matC = matC * cholB.matrixL();
213
+ matC = cholB.matrixU() * matC;
214
+
215
+ Base::compute(matC, computeEigVecs ? ComputeEigenvectors : EigenvaluesOnly);
216
+
217
+ // transform back the eigen vectors: evecs = L * evecs
218
+ if(computeEigVecs)
219
+ Base::m_eivec = cholB.matrixL() * Base::m_eivec;
220
+ }
221
+
222
+ return *this;
223
+ }
224
+
225
+ } // end namespace Eigen
226
+
227
+ #endif // EIGEN_GENERALIZEDSELFADJOINTEIGENSOLVER_H