@Test public void testEigenvalueCheck() throws Exception { int size = 100; Matrix m = randomHierarchicalSymmetricMatrix(size); Vector initialVector = new DenseVector(size); initialVector.assign(1.0 / Math.sqrt(size)); LanczosSolver solver = new LanczosSolver(); int desiredRank = 80; LanczosState state = new LanczosState(m, desiredRank, initialVector); solver.solve(state, desiredRank, true); EigenDecomposition decomposition = new EigenDecomposition(m); Vector eigenvalues = decomposition.getRealEigenvalues(); float fractionOfEigensExpectedGood = 0.6f; for (int i = 0; i < fractionOfEigensExpectedGood * desiredRank; i++) { double s = state.getSingularValue(i); double e = eigenvalues.get(i); log.info("{} : L = {}, E = {}", i, s, e); assertTrue("Singular value differs from eigenvalue", Math.abs((s-e)/e) < ERROR_TOLERANCE); Vector v = state.getRightSingularVector(i); Vector v2 = decomposition.getV().viewColumn(i); double error = 1 - Math.abs(v.dot(v2)/(v.norm(2) * v2.norm(2))); log.info("error: {}", error); assertTrue(i + ": 1 - cosAngle = " + error, error < ERROR_TOLERANCE); } }
public void solve(LanczosState state, int desiredRank) { solve(state, desiredRank, false); }
LanczosSolver { public void solve(LanczosState state, int desiredRank) { solve(state, desiredRank, false); } }
LanczosSolver { public void solve(LanczosState state, int desiredRank) { solve(state, desiredRank, false); }  }
LanczosSolver { public void solve(LanczosState state, int desiredRank) { solve(state, desiredRank, false); }  void solve(LanczosState state,
                    int desiredRank); void solve(LanczosState state,
                    int desiredRank,
                    boolean isSymmetric); }
LanczosSolver { public void solve(LanczosState state, int desiredRank) { solve(state, desiredRank, false); }  void solve(LanczosState state,
                    int desiredRank); void solve(LanczosState state,
                    int desiredRank,
                    boolean isSymmetric); static final double SAFE_MAX; }