/// Tests that method /// <see cref="SpectralDecomposition /// .GetEigenvalues(ComplexMatrix)"/>, /// method has /// been properly implemented. public static void Succeed( TestableSpectralDecomposition <TestableComplexMatrix, ComplexMatrix> testableSD) { var testableMatrix = testableSD.TestableMatrix; #region Writable // Dense, Lower { var actualValues = SpectralDecomposition.GetEigenvalues( testableMatrix.AsDense, lowerTriangularPart: true); DoubleMatrixAssert.AreEqual( expected: GetMainDiagonal(testableSD.Values), actual: actualValues, delta: SpectralDecompositionTest.Accuracy); } // Sparse, Lower { var actualValues = SpectralDecomposition.GetEigenvalues( testableMatrix.AsSparse, lowerTriangularPart: true); DoubleMatrixAssert.AreEqual( expected: GetMainDiagonal(testableSD.Values), actual: actualValues, delta: SpectralDecompositionTest.Accuracy); } // Dense, Upper { var actualValues = SpectralDecomposition.GetEigenvalues( testableMatrix.AsDense, lowerTriangularPart: false); DoubleMatrixAssert.AreEqual( expected: GetMainDiagonal(testableSD.Values), actual: actualValues, delta: SpectralDecompositionTest.Accuracy); } // Sparse, Upper { var actualValues = SpectralDecomposition.GetEigenvalues( testableMatrix.AsSparse, lowerTriangularPart: false); DoubleMatrixAssert.AreEqual( expected: GetMainDiagonal(testableSD.Values), actual: actualValues, delta: SpectralDecompositionTest.Accuracy); } #endregion #region ReadOnly // Dense, Lower { var actualValues = SpectralDecomposition.GetEigenvalues( testableMatrix.AsDense.AsReadOnly(), lowerTriangularPart: true); DoubleMatrixAssert.AreEqual( expected: GetMainDiagonal(testableSD.Values), actual: actualValues, delta: SpectralDecompositionTest.Accuracy); } // Sparse, Lower { var actualValues = SpectralDecomposition.GetEigenvalues( testableMatrix.AsSparse.AsReadOnly(), lowerTriangularPart: true); DoubleMatrixAssert.AreEqual( expected: GetMainDiagonal(testableSD.Values), actual: actualValues, delta: SpectralDecompositionTest.Accuracy); } // Dense, Upper { var actualValues = SpectralDecomposition.GetEigenvalues( testableMatrix.AsDense.AsReadOnly(), lowerTriangularPart: false); DoubleMatrixAssert.AreEqual( expected: GetMainDiagonal(testableSD.Values), actual: actualValues, delta: SpectralDecompositionTest.Accuracy); } // Sparse, Upper { var actualValues = SpectralDecomposition.GetEigenvalues( testableMatrix.AsSparse.AsReadOnly(), lowerTriangularPart: false); DoubleMatrixAssert.AreEqual( expected: GetMainDiagonal(testableSD.Values), actual: actualValues, delta: SpectralDecompositionTest.Accuracy); } #endregion }
/// Tests that method /// <see cref="SpectralDecomposition /// .Decompose(DoubleMatrix, bool, out DoubleMatrix)"/>, /// has been properly implemented. public static void Succeed( TestableSpectralDecomposition <TestableDoubleMatrix, DoubleMatrix> testableSD) { var testableMatrix = testableSD.TestableMatrix; #region Writable // Dense, Lower { var actualValues = SpectralDecomposition.Decompose( testableMatrix.AsDense, lowerTriangularPart: true, out DoubleMatrix actualVectors); DoubleMatrixAssert.AreEqual( expected: testableSD .Values, actual: actualValues, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .VectorsIfLower, actual: actualVectors, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .TestableMatrix.AsDense, actual: actualVectors * actualValues * actualVectors.Transpose(), delta: SpectralDecompositionTest.Accuracy); } // Sparse, Lower { var actualValues = SpectralDecomposition.Decompose( testableMatrix.AsSparse, lowerTriangularPart: true, out DoubleMatrix actualVectors); DoubleMatrixAssert.AreEqual( expected: testableSD .Values, actual: actualValues, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .VectorsIfLower, actual: actualVectors, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .TestableMatrix.AsDense, actual: actualVectors * actualValues * actualVectors.Transpose(), delta: SpectralDecompositionTest.Accuracy); } // Dense, Upper { var actualValues = SpectralDecomposition.Decompose( testableMatrix.AsDense, lowerTriangularPart: false, out DoubleMatrix actualVectors); DoubleMatrixAssert.AreEqual( expected: testableSD .Values, actual: actualValues, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .VectorsIfUpper, actual: actualVectors, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .TestableMatrix.AsDense, actual: actualVectors * actualValues * actualVectors.Transpose(), delta: SpectralDecompositionTest.Accuracy); } // Sparse, Upper { var actualValues = SpectralDecomposition.Decompose( testableMatrix.AsSparse, lowerTriangularPart: false, out DoubleMatrix actualVectors); DoubleMatrixAssert.AreEqual( expected: testableSD .Values, actual: actualValues, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .VectorsIfUpper, actual: actualVectors, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .TestableMatrix.AsDense, actual: actualVectors * actualValues * actualVectors.Transpose(), delta: SpectralDecompositionTest.Accuracy); } #endregion #region ReadOnly // Dense, Lower { var actualValues = SpectralDecomposition.Decompose( testableMatrix.AsDense.AsReadOnly(), lowerTriangularPart: true, out DoubleMatrix actualVectors); DoubleMatrixAssert.AreEqual( expected: testableSD .Values, actual: actualValues, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .VectorsIfLower, actual: actualVectors, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .TestableMatrix.AsDense, actual: actualVectors * actualValues * actualVectors.Transpose(), delta: SpectralDecompositionTest.Accuracy); } // Sparse, Lower { var actualValues = SpectralDecomposition.Decompose( testableMatrix.AsSparse.AsReadOnly(), lowerTriangularPart: true, out DoubleMatrix actualVectors); DoubleMatrixAssert.AreEqual( expected: testableSD .Values, actual: actualValues, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .VectorsIfLower, actual: actualVectors, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .TestableMatrix.AsDense, actual: actualVectors * actualValues * actualVectors.Transpose(), delta: SpectralDecompositionTest.Accuracy); } // Dense, Upper { var actualValues = SpectralDecomposition.Decompose( testableMatrix.AsDense.AsReadOnly(), lowerTriangularPart: false, out DoubleMatrix actualVectors); DoubleMatrixAssert.AreEqual( expected: testableSD .Values, actual: actualValues, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .VectorsIfUpper, actual: actualVectors, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .TestableMatrix.AsDense, actual: actualVectors * actualValues * actualVectors.Transpose(), delta: SpectralDecompositionTest.Accuracy); } // Sparse, Upper { var actualValues = SpectralDecomposition.Decompose( testableMatrix.AsSparse.AsReadOnly(), lowerTriangularPart: false, out DoubleMatrix actualVectors); DoubleMatrixAssert.AreEqual( expected: testableSD .Values, actual: actualValues, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .VectorsIfUpper, actual: actualVectors, delta: SpectralDecompositionTest.Accuracy); DoubleMatrixAssert.AreEqual( expected: testableSD .TestableMatrix.AsDense, actual: actualVectors * actualValues * actualVectors.Transpose(), delta: SpectralDecompositionTest.Accuracy); } #endregion }