예제 #1
0
        /// <summary>
        /// Calculates the eigenvalues and eigenvectors of the symmetric matrix.
        /// </summary>
        /// <returns>The eigenvalues and eigenvectors of the matrix.</returns>
        public (Vector eigenvalues, Matrix eigenvectors) CalcEigensystem()
        {
            Preconditions.CheckSquare(this);
            double[] fullMatrix  = Conversions.PackedUpperColMajorToFullSymmColMajor(data, Order);
            var      eigensystem = SymmetricEigensystemFull.Create(Order, fullMatrix, true);

            return(eigensystem.EigenvaluesReal, eigensystem.EigenvectorsRight);
        }
        private static void TestEigenvaluesOnly(LinearAlgebraProviderChoice providers)
        {
            TestSettings.RunMultiproviderTest(providers, delegate()
            {
                var A = Matrix.CreateFromArray(SymmPosDef10by10.Matrix);
                var eigenvaluesExpected  = Vector.CreateFromArray(SymmPosDef10by10.Eigenvalues);
                var eigenvectorsExpected = Matrix.CreateFromArray(SymmPosDef10by10.Eigenvectors);
                var eigensystem          = SymmetricEigensystemFull.Create(A.NumRows, A.RawData, false);

                // Check
                comparer.AssertEqual(eigenvaluesExpected, eigensystem.EigenvaluesReal);
                Assert.True(eigensystem.EigenvectorsRight == null);
                Assert.True(eigensystem.EigenvaluesImaginary == null);
                Assert.True(eigensystem.EigenvectorsLeft == null);
            });
        }