Skip to content
Numerical Method , home
Menu

Forum Numerical Method Linear Algebra

SVD

  1. osigrtoeltParticipant 2010-12-16 at 10:22 am

    Can anyone please show me some examples of SVD/SVDDecomposition? Thanks.

  2. Haksun LiModerator 2010-12-16 at 1:52 pm

    Here we go.

    <br />
            Matrix A = new DenseMatrix(new double[][]{<br />
                        {1.5, 2, 4.96, 6.37, 36.01},<br />
                        {3, 4, 99, 12.24, 369.6},<br />
                        {73, 63.4, 0.19, 24, 99.39},<br />
                        {25.36, 9.31, 66.78, 88.12, 36.03},<br />
                        {15.51, 63.25, 36.1, 45.68, 111},<br />
                        {55, 66, 12.3, 79, 121},<br />
                        {55.5, 66.9, 12, 79.98, 97.001},<br />
                        {55, 66, 12, 79, 97}<br />
                    });<br />
    <br />
            SVD instance = new SVD(A, true, SVD.Method.GLOUB_KAHAN, 1e-15);<br />
    <br />
            DiagonalMatrix D = instance.D();<br />
            assertTrue(AreMatrices.equal(D,<br />
                    new DiagonalMatrix(new double[]{<br />
                        479.1298232378101, 193.0232889504696, 91.2574218051938, 34.9528538829285, 26.0366391601524//from R<br />
                    }), 1e-12));<br />
    <br />
            Matrix Ut = instance.Ut();<br />
            Matrix U = instance.U();<br />
            Matrix V = instance.V();<br />
    <br />
            Matrix Aexpected = U.multiply(D).multiply(V.t());<br />
            assertTrue(AreMatrices.equal(Aexpected, A, 1e-12));<br />
    <br />
            Matrix Dexpected = Ut.multiply(A).multiply(V);<br />
            assertTrue(AreMatrices.equal(Dexpected, D, 1e-12));<br />