Пример #1
0
        public static void SquaredMatrixInverseWorks()
        {
            // Arrange
            var inMat = new double[, ] {
                { 2, 4, 6 }, { 2, 0, 2 }, { 6, 8, 14 }
            };
            var inMatCopy = new double[, ] {
                { 2, 4, 6 }, { 2, 0, 2 }, { 6, 8, 14 }
            };

            // Act
            // using AA+A = A
            var result = PseudoInverse.PInv(inMat);
            var aainva = inMatCopy.Multiply(result).Multiply(inMatCopy);

            var rounded = aainva.RoundToNextInt();
            var isequal = rounded.IsEqual(inMatCopy);

            // Assert
            Assert.IsTrue(isequal);
        }
Пример #2
0
        public static void NonSquaredMatrixPseudoInverseMatrixWorks()
        {
            // Arrange
            var inMat = new double[, ] {
                { 1, 2, 3, 4 }, { 0, 1, 4, 7 }, { 5, 6, 0, 1 }
            };
            var inMatCopy = new double[, ] {
                { 1, 2, 3, 4 }, { 0, 1, 4, 7 }, { 5, 6, 0, 1 }
            };

            // Act
            // using (A+)+ = A
            var result  = PseudoInverse.PInv(inMat);
            var result2 = PseudoInverse.PInv(result);

            var rounded = result2.RoundToNextInt();

            var isequal = rounded.IsEqual(inMatCopy);

            // Assert
            Assert.IsTrue(isequal);
        }