Accord.Tests.Math.JaggedSingularValueDecompositionTest.JaggedSingularValueDecompositionConstructorTest2 C# (CSharp) Method

JaggedSingularValueDecompositionConstructorTest2() private method

private JaggedSingularValueDecompositionConstructorTest2 ( ) : void
return void
        public void JaggedSingularValueDecompositionConstructorTest2()
        {
            // test for m-x-n matrices where m > n (4 > 2)

            double[][] value = new double[][]
            { 
                 new double[] { 1, 2 },
                 new double[] { 3, 4 },
                 new double[] { 5, 6 },
                 new double[] { 7, 8 }
             }; // value is 4x2, thus having more rows than columns


            var target = new JaggedSingularValueDecomposition(value, true, true, false);

            double[][] actual = Matrix.Multiply(Matrix.Multiply(target.LeftSingularVectors,
                                target.DiagonalMatrix),
                                target.RightSingularVectors.Transpose());

            // Checking the decomposition
            Assert.IsTrue(Matrix.IsEqual(actual, value, 1e-2));
            Assert.IsTrue(Matrix.IsEqual(value, target.Reverse(), 1e-5));

            double[][] U = // economy svd
            {
                new double[] {  0.152483233310201,  0.822647472225661,  },
                new double[] {  0.349918371807964,  0.421375287684580,  },
                new double[] {  0.547353510305727,  0.0201031031435023, },
                new double[] {  0.744788648803490, -0.381169081397574,  },
            };

            // U should be equal except for some sign changes
            Assert.IsTrue(Matrix.IsEqual(target.LeftSingularVectors, U, 0.001));



            // Checking values
            double[][] V =
            {
                new double[] {  0.641423027995072, -0.767187395072177 },
                new double[] {  0.767187395072177,  0.641423027995072 },
            };

            // V should be equal except for some sign changes
            Assert.IsTrue(Matrix.IsEqual(target.RightSingularVectors, V, 0.0001));


            double[][] S = 
            {
                new double[] { 14.2690954992615, 0.000000000000000 },
                new double[] {  0.0000000000000,	0.626828232417543 },
            };

            // The diagonal values should be equal
            Assert.IsTrue(Matrix.IsEqual(target.Diagonal, Matrix.Diagonal(S), 0.001));
        }