/** * 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]; }
/** * 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; }
} 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");
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"); }