예제 #1
0
        private static void TestClear()
        {
            var zero   = Matrix.CreateZero(SymmPosDef10by10.Order, SymmPosDef10by10.Order);
            var matrix = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);

            matrix.Clear();
            comparer.AssertEqual(zero, matrix);
        }
예제 #2
0
        private static void TestGetRow()
        {
            var matrix = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);

            for (int i = 0; i < SymmPosDef10by10.Order; ++i)
            {
                Vector rowExpected = DenseStrategies.GetRow(matrix, i);
                Vector rowComputed = matrix.GetRow(i);
                comparer.AssertEqual(rowExpected, rowComputed);
            }
        }
예제 #3
0
        private static void TestGetColumn()
        {
            var matrix = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);

            for (int j = 0; j < SymmPosDef10by10.Order; ++j)
            {
                Vector colExpected = DenseStrategies.GetColumn(matrix, j);
                Vector colComputed = matrix.GetColumn(j);
                comparer.AssertEqual(colExpected, colComputed);
            }
        }
 private static void TestDeterminant(LinearAlgebraProviderChoice providers)
 {
     TestSettings.RunMultiproviderTest(providers, delegate()
     {
         // positive definite
         var A = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);
         CholeskyPacked factorization = A.FactorCholesky();
         double detComputed           = factorization.CalcDeterminant();
         comparer.AssertEqual(SymmPosDef10by10.Determinant, detComputed);
     });
 }
예제 #5
0
        private static void TestArrayCopy()
        {
            // positive definite
            var A1 = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);

            comparer.AssertEqual(SymmPosDef10by10.Matrix, A1.CopyToArray2D());

            // singular
            var A2 = SymmetricMatrix.CreateFromArray(SymmSingular10by10.Matrix);

            comparer.AssertEqual(SymmSingular10by10.Matrix, A2.CopyToArray2D());
        }
 private static void TestInversion(LinearAlgebraProviderChoice providers)
 {
     TestSettings.RunMultiproviderTest(providers, delegate()
     {
         // positive definite
         var A = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);
         var inverseAExpected             = Matrix.CreateFromArray(SymmPosDef10by10.Inverse);
         CholeskyPacked factorization     = A.FactorCholesky();
         SymmetricMatrix inverseAComputed = factorization.Invert(true);
         comparer.AssertEqual(inverseAExpected, inverseAComputed);
     });
 }
 private static void TestSystemSolution(LinearAlgebraProviderChoice providers)
 {
     TestSettings.RunMultiproviderTest(providers, delegate()
     {
         // positive definite
         var A         = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);
         var b         = Vector.CreateFromArray(SymmPosDef10by10.Rhs);
         var xExpected = Vector.CreateFromArray(SymmPosDef10by10.Lhs);
         CholeskyPacked factorization = A.FactorCholesky();
         Vector xComputed             = factorization.SolveLinearSystem(b);
         comparer.AssertEqual(xExpected, xComputed);
     });
 }
        private static void TestEigensystemCalledFromPackedMatrix(LinearAlgebraProviderChoice providers)
        {
            TestSettings.RunMultiproviderTest(providers, delegate()
            {
                var A = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);
                var eigenvaluesExpected  = Vector.CreateFromArray(SymmPosDef10by10.Eigenvalues);
                var eigenvectorsExpected = Matrix.CreateFromArray(SymmPosDef10by10.Eigenvectors);
                (Vector eigenvalues, Matrix eigenvectors) = A.CalcEigensystem();

                // Check
                comparer.AssertEqual(eigenvaluesExpected, eigenvalues);
                comparer.AssertEqual(eigenvectorsExpected, eigenvectors);
            });
        }
예제 #9
0
        private static void TestSerialization()
        {
            var originalMatrix = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);
            var formatter      = new BinaryFormatter();

            using (var stream = new MemoryStream())
            {
                formatter.Serialize(stream, originalMatrix);
                stream.Seek(0, SeekOrigin.Begin);
                var deserializedMatrix = (SymmetricMatrix)formatter.Deserialize(stream);

                Assert.True(originalMatrix.Equals(deserializedMatrix));
            }
        }
예제 #10
0
        private static void TestMatrixVectorMultiplicationIntoResult(LinearAlgebraProviderChoice providers)
        {
            // The result vectors will first be set to some non zero values to make sure that the result overwrites
            // them instead of being added to them.

            TestSettings.RunMultiproviderTest(providers, delegate()
            {
                var A            = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);
                var x            = Vector.CreateFromArray(SymmPosDef10by10.Lhs);
                var bExpected    = Vector.CreateFromArray(SymmPosDef10by10.Rhs);
                Vector bComputed = Vector.CreateWithValue(A.NumRows, 1.0);
                A.MultiplyIntoResult(x, bComputed, false);
                comparer.AssertEqual(bExpected, bComputed);
            });
        }
예제 #11
0
        private static void TestTransposition()
        {
            // invertible
            var             A1 = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);
            var             A1TransposeExpected = MatrixOperations.Transpose(SymmPosDef10by10.Matrix);
            SymmetricMatrix A1TransposeComputed = A1.Transpose(false);

            comparer.AssertEqual(A1TransposeExpected, A1TransposeComputed.CopyToArray2D());

            // singular
            var             A2 = SymmetricMatrix.CreateFromArray(SymmSingular10by10.Matrix);
            var             A2TransposeExpected = MatrixOperations.Transpose(SymmSingular10by10.Matrix);
            SymmetricMatrix A2TransposeComputed = A2.Transpose(false);

            comparer.AssertEqual(A2TransposeExpected, A2TransposeComputed.CopyToArray2D());
        }
        private static void TestFactorization(LinearAlgebraProviderChoice providers)
        {
            TestSettings.RunMultiproviderTest(providers, delegate()
            {
                // positive definite
                var A1         = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);
                var expectedU1 = Matrix.CreateFromArray(SymmPosDef10by10.FactorU);
                CholeskyPacked factorization1 = A1.FactorCholesky();
                TriangularUpper computedU1    = factorization1.GetFactorU();
                comparer.AssertEqual(expectedU1, computedU1);

                // singular
                var A2 = SymmetricMatrix.CreateFromArray(SquareSingular10by10.Matrix);
                Assert.Throws <IndefiniteMatrixException>(() => A2.FactorCholesky());
            });
        }
예제 #13
0
        private static void TestMatrixVectorMultiplication(LinearAlgebraProviderChoice providers)
        {
            TestSettings.RunMultiproviderTest(providers, delegate()
            {
                // invertible
                var A1            = SymmetricMatrix.CreateFromArray(SymmPosDef10by10.Matrix);
                var x1            = Vector.CreateFromArray(SymmPosDef10by10.Lhs);
                var b1Expected    = Vector.CreateFromArray(SymmPosDef10by10.Rhs);
                Vector b1Computed = A1.Multiply(x1);
                comparer.AssertEqual(b1Expected, b1Computed);

                // singular
                var A2            = SymmetricMatrix.CreateFromArray(SymmSingular10by10.Matrix);
                var x2            = Vector.CreateFromArray(SymmSingular10by10.Lhs);
                var b2Expected    = Vector.CreateFromArray(SymmSingular10by10.Rhs);
                Vector b2Computed = A2.Multiply(x1);
                comparer.AssertEqual(b2Expected, b2Computed);
            });
        }