public static MDS of(double[][] proximity) {
        return of(proximity, new Properties());
    }
@Test
    public void test() {
        System.out.println("MDS");

        double[] eig = {19538377.0895, 11856555.3340};
        double[][] points = {
            { 2290.274680,  1798.80293},
            { -825.382790,   546.81148},
            {   59.183341,  -367.08135},
            {  -82.845973,  -429.91466},
            { -352.499435,  -290.90843},
            {  293.689633,  -405.31194},
            {  681.931545, -1108.64478},
            {   -9.423364,   240.40600},
            {-2048.449113,   642.45854},
            {  561.108970,  -773.36929},
            { 164.921799,   -549.36704},
            {-1935.040811,    49.12514},
            { -226.423236,   187.08779},
            {-1423.353697,   305.87513},
            { -299.498710,   388.80726},
            {  260.878046,   416.67381},
            {  587.675679,    81.18224},
            { -156.836257,  -211.13911},
            {  709.413282,  1109.36665},
            {  839.445911, -1836.79055},
            {  911.230500,   205.93020}
        };

        MDS mds = MDS.of(Eurodist.x);
        assertArrayEquals(eig, mds.scores, 1E-4);

        double sign0 = Math.signum(points[0][0] * mds.coordinates[0][0]);
        double sign1 = Math.signum(points[0][1] * mds.coordinates[0][1]);
        for (int i = 0; i < points.length; i++) {
            points[i][0] *= sign0;
            points[i][1] *= sign1;
            assertArrayEquals(points[i], mds.coordinates[i], 1E-4);
        }
    }