private final static int dsygvd(int itype, String jobz, String uplo, int n, double[] a, int lda, double[] b, int ldb, double[] w) { double[] work = new double[1]; double[] tmp = new double[1]; intW info = new intW(-1); int lwork; int[] iwork = new int[1]; int liwork; //call with info=-1 to determine size of working space LAPACK.getInstance().dsygvd(itype, jobz, uplo, n, tmp, lda, tmp, ldb, tmp, work, -1, iwork, 0, info); if (info.val != 0) return info.val; //an error occurred //setup working space lwork = (int) work[0]; work = new double[lwork]; liwork = (int) iwork[0]; iwork = new int[liwork]; //and do the work LAPACK.getInstance().dsygvd(itype, jobz, uplo, n, a, lda, b, ldb, w, work, lwork, iwork, liwork, info); return info.val; }
RContext.debuggingFormat(debuggingFormat); if (interactive || inputFile == null) { System.err.println("Using LAPACK: " + LAPACK.getInstance().getClass().getName()); System.err.println("Using BLAS: " + BLAS.getInstance().getClass().getName()); System.err.println("Using GNUR: " + (RContext.hasGNUR() ? "yes" : "not available"));
lwork = 3 * mn * mn + Math.max(maxmn, 4 * mn * mn + 4 * mn) + maxmn; work = new float[lwork]; LAPACK.getInstance().sgesdd("A", m, n, elementsA, m, elementsS, elementsU, m, elementsVt, n, work, lwork, iwork, info); } else { // JOBZ='S' lwork = 3 * mn * mn + Math.max(maxmn, 4 * mn * mn + 4 * mn) + maxmn; work = new float[lwork]; LAPACK.getInstance().sgesdd("S", m, n, elementsA, m, elementsS, elementsU, m, elementsVt, mn, work, lwork, iwork, info); lwork = 3 * mn + Math.max(maxmn, 6 * mn) + maxmn; work = new float[lwork]; LAPACK.getInstance().sgesdd("N", m, n, elementsA, m, elementsS, null, m, null, n, work, lwork, iwork, info);
lwork = 3 * mn * mn + Math.max(maxmn, 4 * mn * mn + 4 * mn) + maxmn; work = new double[lwork]; LAPACK.getInstance().dgesdd("A", m, n, elementsA, m, elementsS, elementsU, m, elementsVt, n, work, lwork, iwork, info); } else { // JOBZ='S' lwork = 3 * mn * mn + Math.max(maxmn, 4 * mn * mn + 4 * mn) + maxmn; work = new double[lwork]; LAPACK.getInstance().dgesdd("S", m, n, elementsA, m, elementsS, elementsU, m, elementsVt, mn, work, lwork, iwork, info); lwork = 3 * mn + Math.max(maxmn, 6 * mn) + maxmn; work = new double[lwork]; LAPACK.getInstance().dgesdd("N", m, n, elementsA, m, elementsS, null, m, null, n, work, lwork, iwork, info);
lwork = 3 * mn * mn + Math.max(maxmn, 4 * mn * mn + 4 * mn) + maxmn; work = new float[lwork]; LAPACK.getInstance().sgesdd("A", m, n, elementsA, m, elementsS, elementsU, m, elementsVt, n, work, lwork, iwork, info); } else { // JOBZ='S' lwork = 3 * mn * mn + Math.max(maxmn, 4 * mn * mn + 4 * mn) + maxmn; work = new float[lwork]; LAPACK.getInstance().sgesdd("S", m, n, elementsA, m, elementsS, elementsU, m, elementsVt, mn, work, lwork, iwork, info); lwork = 3 * mn + Math.max(maxmn, 6 * mn) + maxmn; work = new float[lwork]; LAPACK.getInstance().sgesdd("N", m, n, elementsA, m, elementsS, null, m, null, n, work, lwork, iwork, info);
lwork = 3 * mn * mn + Math.max(maxmn, 4 * mn * mn + 4 * mn) + maxmn; work = new double[lwork]; LAPACK.getInstance().dgesdd("A", m, n, elementsA, m, elementsS, elementsU, m, elementsVt, n, work, lwork, iwork, info); } else { // JOBZ='S' lwork = 3 * mn * mn + Math.max(maxmn, 4 * mn * mn + 4 * mn) + maxmn; work = new double[lwork]; LAPACK.getInstance().dgesdd("S", m, n, elementsA, m, elementsS, elementsU, m, elementsVt, mn, work, lwork, iwork, info); lwork = 3 * mn + Math.max(maxmn, 6 * mn) + maxmn; work = new double[lwork]; LAPACK.getInstance().dgesdd("N", m, n, elementsA, m, elementsS, null, m, null, n, work, lwork, iwork, info);
public void factorize(Matrix m, int numDimensions) { LAPACK l = LAPACK.getInstance();
LAPACK.getInstance().dgetrf(n, n, laA, n, laIPIV, laINFO); if (laINFO.val < 0) { throw RError.getLapackError(ast, laINFO.val, "dgetrf");
LAPACK.getInstance().dsyevr(laJOBZ, "A", "L", n, values, n, 0, 0, 0, 0, 0, laM, laW, laZ, n, laISUPPZ, laWORK, -1, laIWORK, -1, laINFO); if (laINFO.val != 0) { throw RError.getLapackError(ast, laINFO.val, "dsyevr"); } int laLWORK = (int) laWORK[0]; LAPACK.getInstance().dsyevr(laJOBZ, "A", "L", n, values, n, 0, 0, 0, 0, 0, laM, laW, laZ, n, laISUPPZ, laWORK, laLWORK, laIWORK, laLIWORK, laINFO); if (laINFO.val != 0) { throw RError.getLapackError(ast, laINFO.val, "dsyevr"); } resValues = RDouble.RDoubleFactory.getFor(Utils.reverse(laW)); LAPACK.getInstance().dgeev("N", laJOBVR, n, values, n, laWR, laWI, null, n, laVR, n, laWORK, -1, laINFO); if (laINFO.val != 0) { throw RError.getLapackError(ast, laINFO.val, "dgeev"); } int laLWORK = (int) laWORK[0]; LAPACK.getInstance().dgeev("N", laJOBVR, n, values, n, laWR, laWI, null, n, laVR, n, laWORK, laLWORK, laINFO); if (laINFO.val != 0) { throw RError.getLapackError(ast, laINFO.val, "dgeev"); }
intW laINFO = new intW(0); LAPACK.getInstance().dgeqp3(m, n, laA, m, laJPVT, laTAU, laWORK, -1, laINFO); if (laINFO.val < 0) { throw RError.getLapackError(ast, laINFO.val, "dgeqp3"); LAPACK.getInstance().dgeqp3(m, n, laA, m, laJPVT, laTAU, laWORK, laLWORK, laINFO); if (laINFO.val < 0) { throw RError.getLapackError(ast, laINFO.val, "dgeqp3");
if (!pivot) { LAPACK.getInstance().dpotrf("U", n, res, n, laINFO); if (laINFO.val != 0) { if (laINFO.val > 0) {
LAPACK.getInstance().dormqr("L", "T", n, ny, laK, laA, n, laTAU, laC, n, laWORK, -1, laINFO); if (laINFO.val != 0) { throw RError.getLapackError(ast, laINFO.val, "dormqr"); LAPACK.getInstance().dormqr("L", "T", n, ny, laK, laA, n, laTAU, laC, n, laWORK, laLWORK, laINFO); if (laINFO.val != 0) { throw RError.getLapackError(ast, laINFO.val, "dormqr"); LAPACK.getInstance().dtrtrs("U", "N", "N", laK, ny, laA, n, laC, n, laINFO); if (laINFO.val != 0) { throw RError.getLapackError(ast, laINFO.val, "dtrtrs");