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);
/** * If LWORK = -1, then a workspace query is assumed; the routine only * calculates the optimal size of the WORK array, returns this value as the * first entry of the WORK array. * */ private double[] allocateWorkspace() { int lwork = ((l || r) ? 4 : 3) * n; final double[] query = new double[1]; final intW info = new intW(0); lapack.dgeev( jobv(l), jobv(r), n, null, n, null, null, null, n, null, n, query, -1, info); if (info.val == 0) lwork = (int) query[0]; return new double[lwork]; }
double[] work = new double[1]; int[] iwork = new int[1]; _lapack.dsyevr("V","A","L", _n,aa,_n,0.0,0.0,0,0,0.0,mW,_d,_v,_n,isuppz, work,-1,iwork,-1,li); int liwork = iwork[0]; iwork = new int[liwork]; _lapack.dsyevr("V","A","L", _n,aa,_n,0.0,0.0,0,0,0.0,mW,_d,_v,_n,isuppz, work,lwork,iwork,liwork,li); } else { double[] work = new double[1]; _lapack.dgeev("N","V",_n,aa,_n,_d,_e,_v,_n,_v,_n,work,-1,li); li.check("dgeev"); int lwork = (int)work[0]; work = new double[lwork]; _lapack.dgeev("N","V",_n,aa,_n,_d,_e,_v,_n,_v,_n,work,lwork,li); if (li.get("dgeev")>0) throw new RuntimeException("LAPACK dgeev failed to converge");
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; }
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);
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"); }
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");
LAPACK.getInstance().dgetrf(n, n, laA, n, laIPIV, laINFO); if (laINFO.val < 0) { throw RError.getLapackError(ast, laINFO.val, "dgetrf");
if (!pivot) { LAPACK.getInstance().dpotrf("U", n, res, n, laINFO); if (laINFO.val != 0) { if (laINFO.val > 0) {
public void factorize(Matrix m, int numDimensions) { LAPACK l = LAPACK.getInstance(); l.dsyevx(
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");
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"));
_ipiv = new int[_npiv]; LapackInfo li = new LapackInfo(); _lapack.dgetrf(_m,_n,_lu,_m,_ipiv,li); int info = li.get("dgetrf"); _p = new int[_m];
/** * Constructs a Cholesky decomposition of the specified matrix A. * The matrix A must be symmetric. For efficiency, this condition * is assumed and not checked. That is, only the lower triangular * part of A is used to perform the decomposition. * @param a the matrix. */ public DMatrixChd(DMatrix a) { Check.argument(a.isSquare(),"A is square"); _n = a.getN(); _l = a.getPackedColumns(); // Zero elements above lower triangle. for (int j=0; j<_n; ++j) { for (int i=0; i<j; ++i) { _l[i+j*_n] = 0.0; } } // Decompose. LapackInfo li = new LapackInfo(); _lapack.dpotrf("L",_n,_l,_n,li); int info = li.get("dpotrf"); _pd = info==0; _det = 1.0; for (int i=0; i<_n; ++i) _det *= _l[i+i*_n]; _det = _det*_det; }
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);
/** * If LWORK = -1, then a workspace query is assumed; the routine only * calculates the optimal size of the WORK array, returns this value as the * first entry of the WORK array. * */ private double[] allocateWorkspace() { int lwork = ((l || r) ? 4 : 3) * n; final double[] query = new double[1]; final intW info = new intW(0); lapack.dgeev( jobv(l), jobv(r), n, null, n, null, null, null, n, null, n, query, -1, info); if (info.val == 0) lwork = (int) query[0]; return new double[lwork]; }
@Override public AllEigenvalues run() { final double[] wr = new double[n]; final double[] wi = new double[n]; final intW info = new intW(0); final double[] a = A.asColumnMajorArray(); final double[] vl = new double[l ? n * n : 0]; final double[] vr = new double[r ? n * n : 0]; final double[] work = allocateWorkspace(); lapack.dgeev( jobv(l), jobv(r), n, a, // overwritten on output! n, wr, // output: real eigenvalues wi, // output: imaginary eigenvalues vl, // output:: left eigenvectors n, vr, // output:: right eigenvectors n, work, work.length, info); if (info.val != 0) throw new Error("dgeev ERRNO=" + info.val); postprocess(wr, vl); return this; }
@Override public AllEigenvalues run() { final double[] wr = new double[n]; final double[] wi = new double[n]; final intW info = new intW(0); final double[] a = A.asColumnMajorArray(); final double[] vl = new double[l ? n * n : 0]; final double[] vr = new double[r ? n * n : 0]; final double[] work = allocateWorkspace(); lapack.dgeev( jobv(l), jobv(r), n, a, // overwritten on output! n, wr, // output: real eigenvalues wi, // output: imaginary eigenvalues vl, // output:: left eigenvectors n, vr, // output:: right eigenvectors n, work, work.length, info); if (info.val != 0) throw new Error("dgeev ERRNO=" + info.val); postprocess(wr, vl); return this; }