public static Matrix.EVD eigen(IMatrix A, int k) {
        return eigen(A, k, 1.0E-8, 10 * A.nrow());
    }
@Test
    public void testEigen2() {
        System.out.println("eigen2");
        A = new double[500][500];
        A[0][0] = A[1][1] = A[2][2] = A[3][3] = 2.0;
        for (int i = 4; i < 500; i++)
            A[i][i] = (500 - i) / 500.0;
        Matrix a = Matrix.of(A);
        a.uplo(UPLO.LOWER);
        Matrix.EVD result = Lanczos.eigen(a, 6);
        assertEquals(2.0, result.wr[0], 1E-4);
        assertEquals(2.0, result.wr[1], 1E-4);
        assertEquals(2.0, result.wr[2], 1E-4);
        assertEquals(2.0, result.wr[3], 1E-4);
        assertEquals(0.992, result.wr[4], 1E-4);
        assertEquals(0.990, result.wr[5], 1E-4);
    }