public static IsotonicMDS of(double[][] proximity) {
        return of(proximity, new Properties());
    }
@Test
    public void test() {
        System.out.println("Isotonic MDS");
        double[][] points = {
                {2023.0068, 1868.3016},
                {-781.8541, 596.8077},
                {46.2793, -429.2891},
                {-156.6249, -527.8012},
                {-514.1422, -506.6482},
                {327.9464, -499.7061},
                {719.5708, -1083.3326},
                {-17.1062, 303.5104},
                {-1945.312, 799.1847},
                {582.8252, -784.9216},
                {148.3789, -687.7158},
                {-1969.6474, 153.4056},
                {-203.7808, 211.0122},
                {-1404.4826, 325.0323},
                {-276.8628, 543.1371},
                {297.7253, 460.3404},
                {621.2816, 87.5659},
                {-209.4547, -258.9948},
                {690.2377, 1045.1831},
                {952.4447, -1774.7317},
                {1069.571, 159.6601}
        };

        IsotonicMDS mds = IsotonicMDS.of(Eurodist.x);
        assertEquals(0.05846, mds.stress, 1E-5);

        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);
        }
    }