有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在分解SVD时OjAlgo和CommonMath之间奇异值的差异

我们目前正在评估OjAlgo库,以替代commons数学库进行SVD计算。对于以下输入,OjAlgo和commons math的奇异值之间存在差异

我使用过OjAlgo 47.1.2和develop branch的最新代码,但输出是一样的。这是虫子吗

double[][] olsColumns = { { 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 },
                { 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0 }, { 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0 },
                { 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, { 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 },
                { 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0 }, { 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0 },
                { 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0 }, { 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0 },
                { 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0 }, { 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0 },
                { 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0 }, { 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0 },
                { 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0 } };
        double[] observationVector = {26.0, 12.0, 9.0, 18.0, 16.0, 17.0, 24.0, 32.0, 30.0, 21.0, 16.0, 12.0, 21.0, 16.0};

//OjAlgo


        final PrimitiveDenseStore tmpOriginal = PrimitiveDenseStore.FACTORY.rows(olsColumns);
        SingularValue<Double> tmpSVD = SingularValue.make(tmpOriginal);
        tmpSVD.decompose(tmpOriginal);
        double[] singularValues = tmpSVD.getSingularValues().toRawCopy1D();

        System.out.println("Singular values" + Arrays.toString(singularValues));

//Commons-Math

        RealMatrix newPredM = new Array2DRowRealMatrix(olsColumns);
        SingularValueDecomposition svd = new SingularValueDecomposition(newPredM);
        System.out.println("Singular values" + Arrays.toString(svd.getSingularValues()));

OjAlgo输出 奇异值[4.000000000000001,1.4142135623730956,1.4142135623730951,1.4142135623730951,1.4142135623730951,1.4142135623730951,1.4142135623730945,1.4142135623730945,4.566099776030485E-16]

公共数学输出 奇异值[4.000000000000001,1.4142135623730951,1.4142135623730951,1.414213562373095,1.414213562373095,1.414213562373095,1.4142135623730945,0.0]

有没有办法将OjAlgo奇异值的最后一个值,即4.566099776030485E-16,设为0.0


共 (0) 个答案