Ejemplo n.º 1
0
  public static int syevx(
      char jobz,
      char range,
      char uplo,
      FloatMatrix a,
      float vl,
      float vu,
      int il,
      int iu,
      float abstol,
      FloatMatrix w,
      FloatMatrix z) {
    int n = a.rows;
    int[] iwork = new int[5 * n];
    int[] ifail = new int[n];
    int[] m = new int[1];
    int info;

    info =
        NativeBlas.ssyevx(
            jobz, range, uplo, n, a.data, 0, a.rows, vl, vu, il, iu, abstol, m, 0, w.data, 0,
            z.data, 0, z.rows, iwork, 0, ifail, 0);

    if (info > 0) {
      StringBuilder msg = new StringBuilder();
      msg.append("Not all eigenvalues converged. Non-converging eigenvalues were: ");
      for (int i = 0; i < info; i++) {
        if (i > 0) msg.append(", ");
        msg.append(ifail[i]);
      }
      msg.append(".");
      throw new LapackConvergenceException("SYEVX", msg.toString());
    }

    return info;
  }