Разница в значениях Singular между OjAlgo и Commons-math при разложении SVD - PullRequest
0 голосов
/ 04 июля 2019

В настоящее время мы оцениваем библиотеку OjAlgo как замену библиотеке commons-math для вычисления SVD.Для ввода ниже есть разница между значениями OjAlgo и commons-math.

Я работал с OjAlgo 47.1.2 и с последним кодом из ветки разработки, но вывод такой же.Является ли это ошибкой

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.4142135623730945, 1.4142135623730960 * * * * 10030 * 530 * 530 * * * 530 * * * * * * 530 * * * * * * * * * * * * * = 100 * * * * * 530 * * * * * * * * * * * * * * * * * * = 100 *.4.000000000000001, 1.4142135623730951, 1.4142135623730951, 1.414213562373095, 1.414213562373095, 1.4142135623730945, 1.4142135623730945, 0.0]

Есть ли способ сделать из последнего значения OjAlgo 0.056 * 176 * 060 единственное значение, равное 0,06 * * * 060 * * * * * * * 060 * * * * * * * 060 * * * * * 0996 060 = 060 единственное значение, т.е.

...