Пример #1
0
        public void MatrixNxNConstructor()
        {
            var matrix = new MatrixNxN <int>(10);

            Assert.AreEqual(matrix.Rows, 10);
            Assert.AreEqual(matrix.Columns, 10);
        }
Пример #2
0
 public void MatrixCramersRuleInvalidEquationResults()
 {
     var values = new int[, ]
     {
         { 1, 2 },
         { 3, 4 }
     };
     var matrix = new MatrixNxN <int>(values).CramersRule(new List <int> {
         1, 2, 3
     });
 }
Пример #3
0
        public void MatrixDeterminant2x2()
        {
            var values = new int[, ]
            {
                { 1, 2 },
                { 3, 4 }
            };
            var result = new MatrixNxN <int>(values).Determinant();

            Assert.AreEqual(result, -2);
        }
Пример #4
0
        public void MatrixDeterminant3x3()
        {
            var values = new int[, ]
            {
                { 1, 1, 2 },
                { 3, 5, 1 },
                { 2, 8, 6 }
            };
            var result = new MatrixNxN <int>(values).Determinant();

            Assert.AreEqual(result, 34);
        }
Пример #5
0
        public void MatrixDeterminant4x4()
        {
            var values = new int[, ]
            {
                { 1, 0, 1, 2 },
                { 3, 5, 7, 1 },
                { 2, 8, 4, 6 },
                { 1, -4, -3, 1 }
            };
            var result = new MatrixNxN <int>(values).Determinant();

            Assert.AreEqual(result, 150);
        }
Пример #6
0
        public void MatrixNxNConstructorFromMatrix()
        {
            var values = new int[, ]
            {
                { 1, 2 },
                { 3, 4 }
            };
            var matrix1 = new MatrixNxN <int>(values);

            Assert.AreEqual(matrix1.Zip(Enumerable.Cast <int>(matrix1), (a, b) => a == b).Count(a => !a), 0);
            var matrix2 = new MatrixNxN <int>(matrix1);

            Assert.IsTrue(matrix2.Equals(matrix1));
        }
Пример #7
0
        public void MatrixCramersRuleValidResult()
        {
            var values = new double[, ]
            {
                { 8, -1, -2 },
                { -1, 7, -1 },
                { -2, -1, 9 }
            };
            var result = new MatrixNxN <double>(values).CramersRule(new List <double> {
                0, 10, 23
            });
            var expectedResult = new List <double> {
                1, 2, 3
            };

            Assert.IsTrue(result.SequenceEqual(expectedResult, NumericUtilities.FloatNumberEqualityComparer <double>()));
        }
Пример #8
0
        public void MatrixInverse()
        {
            var values = new double[, ]
            {
                { 1, 2 },
                { 3, 4 }
            };
            var expected = new double[, ]
            {
                { -2, 1 },
                { 1.5, -0.5 }
            };
            var matrix         = new MatrixNxN <double>(values).Inverse();
            var expectedMatrix = new MatrixNxN <double>(expected);

            Assert.IsTrue(matrix.Equals(expectedMatrix));
        }
Пример #9
0
 public void InitializeKernelMatrix(int size = -1)
 {
     kernel = new MatrixNxN((uint)3);
     //for (uint y = 0; y < kernel.N; y++)
     //{
     //    for (uint x = 0; x < kernel.N; x++)
     //    {
     //        kernel[x, y] = -1;
     //    }
     //}
     kernel[1, 0] = -1;
     kernel[1, 2] = -1;
     kernel[0, 1] = -1;
     kernel[2, 1] = -1;
     kernel[1, 1] = 5;
     divisor      = 1;
 }
Пример #10
0
        public MatrixNxN Inverse()
        {
            int       n      = Count1;
            LudCmp    Lud    = new LudCmp(this);
            MatrixNxN result = new MatrixNxN(n);

            for (int j = 0; j < n; j++)
            {
                double[] vec = new double[n];
                for (int i = 0; i < n; i++)
                {
                    vec[i] = 0d;
                }
                vec[j] = 1d;
                vec    = Lud.LubKsb(vec);
                for (int i = 0; i < n; i++)
                {
                    result[i, j] = vec[i];
                }
            }
            return(result);
        }
Пример #11
0
        public void MatrixDivision()
        {
            var values1 = new double[, ]
            {
                { 1, 2, 3 },
                { 5, 6, 7 },
                { 0, 0, 0 }
            };
            var values2 = new double[, ]
            {
                { -7, -9, 11 },
                { 10, -14, -5 },
                { 4, -10, 10 }
            };
            var expectedValues = new double[, ]
            {
                { -281 / 963.0, -283 / 963.0, 913 / 1926.0 },
                { -989 / 963.0, -763 / 963.0, 2761 / 1926.0 },
                { 0, 0, 0 }
            };
            var result = new MatrixNxN <double>(values1) / new MatrixNxN <double>(values2);

            Assert.IsTrue(result.SequenceEqual(Enumerable.Cast <double>(expectedValues), NumericUtilities.FloatNumberEqualityComparer <double>()));
        }
Пример #12
0
 public MatrixNxN MulMatrix(MatrixNxN Mat)
 {
     return(base.MulMatrix(Mat).ToMatrixNxN());
 }