ruby-eigen 0.0.9 → 0.0.10.pre1

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.
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,373 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008-2009 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_HESSENBERGDECOMPOSITION_H
12
+ #define EIGEN_HESSENBERGDECOMPOSITION_H
13
+
14
+ namespace Eigen {
15
+
16
+ namespace internal {
17
+
18
+ template<typename MatrixType> struct HessenbergDecompositionMatrixHReturnType;
19
+ template<typename MatrixType>
20
+ struct traits<HessenbergDecompositionMatrixHReturnType<MatrixType> >
21
+ {
22
+ typedef MatrixType ReturnType;
23
+ };
24
+
25
+ }
26
+
27
+ /** \eigenvalues_module \ingroup Eigenvalues_Module
28
+ *
29
+ *
30
+ * \class HessenbergDecomposition
31
+ *
32
+ * \brief Reduces a square matrix to Hessenberg form by an orthogonal similarity transformation
33
+ *
34
+ * \tparam _MatrixType the type of the matrix of which we are computing the Hessenberg decomposition
35
+ *
36
+ * This class performs an Hessenberg decomposition of a matrix \f$ A \f$. In
37
+ * the real case, the Hessenberg decomposition consists of an orthogonal
38
+ * matrix \f$ Q \f$ and a Hessenberg matrix \f$ H \f$ such that \f$ A = Q H
39
+ * Q^T \f$. An orthogonal matrix is a matrix whose inverse equals its
40
+ * transpose (\f$ Q^{-1} = Q^T \f$). A Hessenberg matrix has zeros below the
41
+ * subdiagonal, so it is almost upper triangular. The Hessenberg decomposition
42
+ * of a complex matrix is \f$ A = Q H Q^* \f$ with \f$ Q \f$ unitary (that is,
43
+ * \f$ Q^{-1} = Q^* \f$).
44
+ *
45
+ * Call the function compute() to compute the Hessenberg decomposition of a
46
+ * given matrix. Alternatively, you can use the
47
+ * HessenbergDecomposition(const MatrixType&) constructor which computes the
48
+ * Hessenberg decomposition at construction time. Once the decomposition is
49
+ * computed, you can use the matrixH() and matrixQ() functions to construct
50
+ * the matrices H and Q in the decomposition.
51
+ *
52
+ * The documentation for matrixH() contains an example of the typical use of
53
+ * this class.
54
+ *
55
+ * \sa class ComplexSchur, class Tridiagonalization, \ref QR_Module "QR Module"
56
+ */
57
+ template<typename _MatrixType> class HessenbergDecomposition
58
+ {
59
+ public:
60
+
61
+ /** \brief Synonym for the template parameter \p _MatrixType. */
62
+ typedef _MatrixType MatrixType;
63
+
64
+ enum {
65
+ Size = MatrixType::RowsAtCompileTime,
66
+ SizeMinusOne = Size == Dynamic ? Dynamic : Size - 1,
67
+ Options = MatrixType::Options,
68
+ MaxSize = MatrixType::MaxRowsAtCompileTime,
69
+ MaxSizeMinusOne = MaxSize == Dynamic ? Dynamic : MaxSize - 1
70
+ };
71
+
72
+ /** \brief Scalar type for matrices of type #MatrixType. */
73
+ typedef typename MatrixType::Scalar Scalar;
74
+ typedef typename MatrixType::Index Index;
75
+
76
+ /** \brief Type for vector of Householder coefficients.
77
+ *
78
+ * This is column vector with entries of type #Scalar. The length of the
79
+ * vector is one less than the size of #MatrixType, if it is a fixed-side
80
+ * type.
81
+ */
82
+ typedef Matrix<Scalar, SizeMinusOne, 1, Options & ~RowMajor, MaxSizeMinusOne, 1> CoeffVectorType;
83
+
84
+ /** \brief Return type of matrixQ() */
85
+ typedef HouseholderSequence<MatrixType,typename internal::remove_all<typename CoeffVectorType::ConjugateReturnType>::type> HouseholderSequenceType;
86
+
87
+ typedef internal::HessenbergDecompositionMatrixHReturnType<MatrixType> MatrixHReturnType;
88
+
89
+ /** \brief Default constructor; the decomposition will be computed later.
90
+ *
91
+ * \param [in] size The size of the matrix whose Hessenberg decomposition will be computed.
92
+ *
93
+ * The default constructor is useful in cases in which the user intends to
94
+ * perform decompositions via compute(). The \p size parameter is only
95
+ * used as a hint. It is not an error to give a wrong \p size, but it may
96
+ * impair performance.
97
+ *
98
+ * \sa compute() for an example.
99
+ */
100
+ HessenbergDecomposition(Index size = Size==Dynamic ? 2 : Size)
101
+ : m_matrix(size,size),
102
+ m_temp(size),
103
+ m_isInitialized(false)
104
+ {
105
+ if(size>1)
106
+ m_hCoeffs.resize(size-1);
107
+ }
108
+
109
+ /** \brief Constructor; computes Hessenberg decomposition of given matrix.
110
+ *
111
+ * \param[in] matrix Square matrix whose Hessenberg decomposition is to be computed.
112
+ *
113
+ * This constructor calls compute() to compute the Hessenberg
114
+ * decomposition.
115
+ *
116
+ * \sa matrixH() for an example.
117
+ */
118
+ HessenbergDecomposition(const MatrixType& matrix)
119
+ : m_matrix(matrix),
120
+ m_temp(matrix.rows()),
121
+ m_isInitialized(false)
122
+ {
123
+ if(matrix.rows()<2)
124
+ {
125
+ m_isInitialized = true;
126
+ return;
127
+ }
128
+ m_hCoeffs.resize(matrix.rows()-1,1);
129
+ _compute(m_matrix, m_hCoeffs, m_temp);
130
+ m_isInitialized = true;
131
+ }
132
+
133
+ /** \brief Computes Hessenberg decomposition of given matrix.
134
+ *
135
+ * \param[in] matrix Square matrix whose Hessenberg decomposition is to be computed.
136
+ * \returns Reference to \c *this
137
+ *
138
+ * The Hessenberg decomposition is computed by bringing the columns of the
139
+ * matrix successively in the required form using Householder reflections
140
+ * (see, e.g., Algorithm 7.4.2 in Golub \& Van Loan, <i>%Matrix
141
+ * Computations</i>). The cost is \f$ 10n^3/3 \f$ flops, where \f$ n \f$
142
+ * denotes the size of the given matrix.
143
+ *
144
+ * This method reuses of the allocated data in the HessenbergDecomposition
145
+ * object.
146
+ *
147
+ * Example: \include HessenbergDecomposition_compute.cpp
148
+ * Output: \verbinclude HessenbergDecomposition_compute.out
149
+ */
150
+ HessenbergDecomposition& compute(const MatrixType& matrix)
151
+ {
152
+ m_matrix = matrix;
153
+ if(matrix.rows()<2)
154
+ {
155
+ m_isInitialized = true;
156
+ return *this;
157
+ }
158
+ m_hCoeffs.resize(matrix.rows()-1,1);
159
+ _compute(m_matrix, m_hCoeffs, m_temp);
160
+ m_isInitialized = true;
161
+ return *this;
162
+ }
163
+
164
+ /** \brief Returns the Householder coefficients.
165
+ *
166
+ * \returns a const reference to the vector of Householder coefficients
167
+ *
168
+ * \pre Either the constructor HessenbergDecomposition(const MatrixType&)
169
+ * or the member function compute(const MatrixType&) has been called
170
+ * before to compute the Hessenberg decomposition of a matrix.
171
+ *
172
+ * The Householder coefficients allow the reconstruction of the matrix
173
+ * \f$ Q \f$ in the Hessenberg decomposition from the packed data.
174
+ *
175
+ * \sa packedMatrix(), \ref Householder_Module "Householder module"
176
+ */
177
+ const CoeffVectorType& householderCoefficients() const
178
+ {
179
+ eigen_assert(m_isInitialized && "HessenbergDecomposition is not initialized.");
180
+ return m_hCoeffs;
181
+ }
182
+
183
+ /** \brief Returns the internal representation of the decomposition
184
+ *
185
+ * \returns a const reference to a matrix with the internal representation
186
+ * of the decomposition.
187
+ *
188
+ * \pre Either the constructor HessenbergDecomposition(const MatrixType&)
189
+ * or the member function compute(const MatrixType&) has been called
190
+ * before to compute the Hessenberg decomposition of a matrix.
191
+ *
192
+ * The returned matrix contains the following information:
193
+ * - the upper part and lower sub-diagonal represent the Hessenberg matrix H
194
+ * - the rest of the lower part contains the Householder vectors that, combined with
195
+ * Householder coefficients returned by householderCoefficients(),
196
+ * allows to reconstruct the matrix Q as
197
+ * \f$ Q = H_{N-1} \ldots H_1 H_0 \f$.
198
+ * Here, the matrices \f$ H_i \f$ are the Householder transformations
199
+ * \f$ H_i = (I - h_i v_i v_i^T) \f$
200
+ * where \f$ h_i \f$ is the \f$ i \f$th Householder coefficient and
201
+ * \f$ v_i \f$ is the Householder vector defined by
202
+ * \f$ v_i = [ 0, \ldots, 0, 1, M(i+2,i), \ldots, M(N-1,i) ]^T \f$
203
+ * with M the matrix returned by this function.
204
+ *
205
+ * See LAPACK for further details on this packed storage.
206
+ *
207
+ * Example: \include HessenbergDecomposition_packedMatrix.cpp
208
+ * Output: \verbinclude HessenbergDecomposition_packedMatrix.out
209
+ *
210
+ * \sa householderCoefficients()
211
+ */
212
+ const MatrixType& packedMatrix() const
213
+ {
214
+ eigen_assert(m_isInitialized && "HessenbergDecomposition is not initialized.");
215
+ return m_matrix;
216
+ }
217
+
218
+ /** \brief Reconstructs the orthogonal matrix Q in the decomposition
219
+ *
220
+ * \returns object representing the matrix Q
221
+ *
222
+ * \pre Either the constructor HessenbergDecomposition(const MatrixType&)
223
+ * or the member function compute(const MatrixType&) has been called
224
+ * before to compute the Hessenberg decomposition of a matrix.
225
+ *
226
+ * This function returns a light-weight object of template class
227
+ * HouseholderSequence. You can either apply it directly to a matrix or
228
+ * you can convert it to a matrix of type #MatrixType.
229
+ *
230
+ * \sa matrixH() for an example, class HouseholderSequence
231
+ */
232
+ HouseholderSequenceType matrixQ() const
233
+ {
234
+ eigen_assert(m_isInitialized && "HessenbergDecomposition is not initialized.");
235
+ return HouseholderSequenceType(m_matrix, m_hCoeffs.conjugate())
236
+ .setLength(m_matrix.rows() - 1)
237
+ .setShift(1);
238
+ }
239
+
240
+ /** \brief Constructs the Hessenberg matrix H in the decomposition
241
+ *
242
+ * \returns expression object representing the matrix H
243
+ *
244
+ * \pre Either the constructor HessenbergDecomposition(const MatrixType&)
245
+ * or the member function compute(const MatrixType&) has been called
246
+ * before to compute the Hessenberg decomposition of a matrix.
247
+ *
248
+ * The object returned by this function constructs the Hessenberg matrix H
249
+ * when it is assigned to a matrix or otherwise evaluated. The matrix H is
250
+ * constructed from the packed matrix as returned by packedMatrix(): The
251
+ * upper part (including the subdiagonal) of the packed matrix contains
252
+ * the matrix H. It may sometimes be better to directly use the packed
253
+ * matrix instead of constructing the matrix H.
254
+ *
255
+ * Example: \include HessenbergDecomposition_matrixH.cpp
256
+ * Output: \verbinclude HessenbergDecomposition_matrixH.out
257
+ *
258
+ * \sa matrixQ(), packedMatrix()
259
+ */
260
+ MatrixHReturnType matrixH() const
261
+ {
262
+ eigen_assert(m_isInitialized && "HessenbergDecomposition is not initialized.");
263
+ return MatrixHReturnType(*this);
264
+ }
265
+
266
+ private:
267
+
268
+ typedef Matrix<Scalar, 1, Size, Options | RowMajor, 1, MaxSize> VectorType;
269
+ typedef typename NumTraits<Scalar>::Real RealScalar;
270
+ static void _compute(MatrixType& matA, CoeffVectorType& hCoeffs, VectorType& temp);
271
+
272
+ protected:
273
+ MatrixType m_matrix;
274
+ CoeffVectorType m_hCoeffs;
275
+ VectorType m_temp;
276
+ bool m_isInitialized;
277
+ };
278
+
279
+ /** \internal
280
+ * Performs a tridiagonal decomposition of \a matA in place.
281
+ *
282
+ * \param matA the input selfadjoint matrix
283
+ * \param hCoeffs returned Householder coefficients
284
+ *
285
+ * The result is written in the lower triangular part of \a matA.
286
+ *
287
+ * Implemented from Golub's "%Matrix Computations", algorithm 8.3.1.
288
+ *
289
+ * \sa packedMatrix()
290
+ */
291
+ template<typename MatrixType>
292
+ void HessenbergDecomposition<MatrixType>::_compute(MatrixType& matA, CoeffVectorType& hCoeffs, VectorType& temp)
293
+ {
294
+ eigen_assert(matA.rows()==matA.cols());
295
+ Index n = matA.rows();
296
+ temp.resize(n);
297
+ for (Index i = 0; i<n-1; ++i)
298
+ {
299
+ // let's consider the vector v = i-th column starting at position i+1
300
+ Index remainingSize = n-i-1;
301
+ RealScalar beta;
302
+ Scalar h;
303
+ matA.col(i).tail(remainingSize).makeHouseholderInPlace(h, beta);
304
+ matA.col(i).coeffRef(i+1) = beta;
305
+ hCoeffs.coeffRef(i) = h;
306
+
307
+ // Apply similarity transformation to remaining columns,
308
+ // i.e., compute A = H A H'
309
+
310
+ // A = H A
311
+ matA.bottomRightCorner(remainingSize, remainingSize)
312
+ .applyHouseholderOnTheLeft(matA.col(i).tail(remainingSize-1), h, &temp.coeffRef(0));
313
+
314
+ // A = A H'
315
+ matA.rightCols(remainingSize)
316
+ .applyHouseholderOnTheRight(matA.col(i).tail(remainingSize-1).conjugate(), numext::conj(h), &temp.coeffRef(0));
317
+ }
318
+ }
319
+
320
+ namespace internal {
321
+
322
+ /** \eigenvalues_module \ingroup Eigenvalues_Module
323
+ *
324
+ *
325
+ * \brief Expression type for return value of HessenbergDecomposition::matrixH()
326
+ *
327
+ * \tparam MatrixType type of matrix in the Hessenberg decomposition
328
+ *
329
+ * Objects of this type represent the Hessenberg matrix in the Hessenberg
330
+ * decomposition of some matrix. The object holds a reference to the
331
+ * HessenbergDecomposition class until the it is assigned or evaluated for
332
+ * some other reason (the reference should remain valid during the life time
333
+ * of this object). This class is the return type of
334
+ * HessenbergDecomposition::matrixH(); there is probably no other use for this
335
+ * class.
336
+ */
337
+ template<typename MatrixType> struct HessenbergDecompositionMatrixHReturnType
338
+ : public ReturnByValue<HessenbergDecompositionMatrixHReturnType<MatrixType> >
339
+ {
340
+ typedef typename MatrixType::Index Index;
341
+ public:
342
+ /** \brief Constructor.
343
+ *
344
+ * \param[in] hess Hessenberg decomposition
345
+ */
346
+ HessenbergDecompositionMatrixHReturnType(const HessenbergDecomposition<MatrixType>& hess) : m_hess(hess) { }
347
+
348
+ /** \brief Hessenberg matrix in decomposition.
349
+ *
350
+ * \param[out] result Hessenberg matrix in decomposition \p hess which
351
+ * was passed to the constructor
352
+ */
353
+ template <typename ResultType>
354
+ inline void evalTo(ResultType& result) const
355
+ {
356
+ result = m_hess.packedMatrix();
357
+ Index n = result.rows();
358
+ if (n>2)
359
+ result.bottomLeftCorner(n-2, n-2).template triangularView<Lower>().setZero();
360
+ }
361
+
362
+ Index rows() const { return m_hess.packedMatrix().rows(); }
363
+ Index cols() const { return m_hess.packedMatrix().cols(); }
364
+
365
+ protected:
366
+ const HessenbergDecomposition<MatrixType>& m_hess;
367
+ };
368
+
369
+ } // end namespace internal
370
+
371
+ } // end namespace Eigen
372
+
373
+ #endif // EIGEN_HESSENBERGDECOMPOSITION_H
@@ -0,0 +1,160 @@
1
+ // This file is part of Eigen, a lightweight C++ template library
2
+ // for linear algebra.
3
+ //
4
+ // Copyright (C) 2008 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_MATRIXBASEEIGENVALUES_H
12
+ #define EIGEN_MATRIXBASEEIGENVALUES_H
13
+
14
+ namespace Eigen {
15
+
16
+ namespace internal {
17
+
18
+ template<typename Derived, bool IsComplex>
19
+ struct eigenvalues_selector
20
+ {
21
+ // this is the implementation for the case IsComplex = true
22
+ static inline typename MatrixBase<Derived>::EigenvaluesReturnType const
23
+ run(const MatrixBase<Derived>& m)
24
+ {
25
+ typedef typename Derived::PlainObject PlainObject;
26
+ PlainObject m_eval(m);
27
+ return ComplexEigenSolver<PlainObject>(m_eval, false).eigenvalues();
28
+ }
29
+ };
30
+
31
+ template<typename Derived>
32
+ struct eigenvalues_selector<Derived, false>
33
+ {
34
+ static inline typename MatrixBase<Derived>::EigenvaluesReturnType const
35
+ run(const MatrixBase<Derived>& m)
36
+ {
37
+ typedef typename Derived::PlainObject PlainObject;
38
+ PlainObject m_eval(m);
39
+ return EigenSolver<PlainObject>(m_eval, false).eigenvalues();
40
+ }
41
+ };
42
+
43
+ } // end namespace internal
44
+
45
+ /** \brief Computes the eigenvalues of a matrix
46
+ * \returns Column vector containing the eigenvalues.
47
+ *
48
+ * \eigenvalues_module
49
+ * This function computes the eigenvalues with the help of the EigenSolver
50
+ * class (for real matrices) or the ComplexEigenSolver class (for complex
51
+ * matrices).
52
+ *
53
+ * The eigenvalues are repeated according to their algebraic multiplicity,
54
+ * so there are as many eigenvalues as rows in the matrix.
55
+ *
56
+ * The SelfAdjointView class provides a better algorithm for selfadjoint
57
+ * matrices.
58
+ *
59
+ * Example: \include MatrixBase_eigenvalues.cpp
60
+ * Output: \verbinclude MatrixBase_eigenvalues.out
61
+ *
62
+ * \sa EigenSolver::eigenvalues(), ComplexEigenSolver::eigenvalues(),
63
+ * SelfAdjointView::eigenvalues()
64
+ */
65
+ template<typename Derived>
66
+ inline typename MatrixBase<Derived>::EigenvaluesReturnType
67
+ MatrixBase<Derived>::eigenvalues() const
68
+ {
69
+ typedef typename internal::traits<Derived>::Scalar Scalar;
70
+ return internal::eigenvalues_selector<Derived, NumTraits<Scalar>::IsComplex>::run(derived());
71
+ }
72
+
73
+ /** \brief Computes the eigenvalues of a matrix
74
+ * \returns Column vector containing the eigenvalues.
75
+ *
76
+ * \eigenvalues_module
77
+ * This function computes the eigenvalues with the help of the
78
+ * SelfAdjointEigenSolver class. The eigenvalues are repeated according to
79
+ * their algebraic multiplicity, so there are as many eigenvalues as rows in
80
+ * the matrix.
81
+ *
82
+ * Example: \include SelfAdjointView_eigenvalues.cpp
83
+ * Output: \verbinclude SelfAdjointView_eigenvalues.out
84
+ *
85
+ * \sa SelfAdjointEigenSolver::eigenvalues(), MatrixBase::eigenvalues()
86
+ */
87
+ template<typename MatrixType, unsigned int UpLo>
88
+ inline typename SelfAdjointView<MatrixType, UpLo>::EigenvaluesReturnType
89
+ SelfAdjointView<MatrixType, UpLo>::eigenvalues() const
90
+ {
91
+ typedef typename SelfAdjointView<MatrixType, UpLo>::PlainObject PlainObject;
92
+ PlainObject thisAsMatrix(*this);
93
+ return SelfAdjointEigenSolver<PlainObject>(thisAsMatrix, false).eigenvalues();
94
+ }
95
+
96
+
97
+
98
+ /** \brief Computes the L2 operator norm
99
+ * \returns Operator norm of the matrix.
100
+ *
101
+ * \eigenvalues_module
102
+ * This function computes the L2 operator norm of a matrix, which is also
103
+ * known as the spectral norm. The norm of a matrix \f$ A \f$ is defined to be
104
+ * \f[ \|A\|_2 = \max_x \frac{\|Ax\|_2}{\|x\|_2} \f]
105
+ * where the maximum is over all vectors and the norm on the right is the
106
+ * Euclidean vector norm. The norm equals the largest singular value, which is
107
+ * the square root of the largest eigenvalue of the positive semi-definite
108
+ * matrix \f$ A^*A \f$.
109
+ *
110
+ * The current implementation uses the eigenvalues of \f$ A^*A \f$, as computed
111
+ * by SelfAdjointView::eigenvalues(), to compute the operator norm of a
112
+ * matrix. The SelfAdjointView class provides a better algorithm for
113
+ * selfadjoint matrices.
114
+ *
115
+ * Example: \include MatrixBase_operatorNorm.cpp
116
+ * Output: \verbinclude MatrixBase_operatorNorm.out
117
+ *
118
+ * \sa SelfAdjointView::eigenvalues(), SelfAdjointView::operatorNorm()
119
+ */
120
+ template<typename Derived>
121
+ inline typename MatrixBase<Derived>::RealScalar
122
+ MatrixBase<Derived>::operatorNorm() const
123
+ {
124
+ using std::sqrt;
125
+ typename Derived::PlainObject m_eval(derived());
126
+ // FIXME if it is really guaranteed that the eigenvalues are already sorted,
127
+ // then we don't need to compute a maxCoeff() here, comparing the 1st and last ones is enough.
128
+ return sqrt((m_eval*m_eval.adjoint())
129
+ .eval()
130
+ .template selfadjointView<Lower>()
131
+ .eigenvalues()
132
+ .maxCoeff()
133
+ );
134
+ }
135
+
136
+ /** \brief Computes the L2 operator norm
137
+ * \returns Operator norm of the matrix.
138
+ *
139
+ * \eigenvalues_module
140
+ * This function computes the L2 operator norm of a self-adjoint matrix. For a
141
+ * self-adjoint matrix, the operator norm is the largest eigenvalue.
142
+ *
143
+ * The current implementation uses the eigenvalues of the matrix, as computed
144
+ * by eigenvalues(), to compute the operator norm of the matrix.
145
+ *
146
+ * Example: \include SelfAdjointView_operatorNorm.cpp
147
+ * Output: \verbinclude SelfAdjointView_operatorNorm.out
148
+ *
149
+ * \sa eigenvalues(), MatrixBase::operatorNorm()
150
+ */
151
+ template<typename MatrixType, unsigned int UpLo>
152
+ inline typename SelfAdjointView<MatrixType, UpLo>::RealScalar
153
+ SelfAdjointView<MatrixType, UpLo>::operatorNorm() const
154
+ {
155
+ return eigenvalues().cwiseAbs().maxCoeff();
156
+ }
157
+
158
+ } // end namespace Eigen
159
+
160
+ #endif