/************************************************************** * Function copies a vector x to a vector y * Based on Fortran-77 routine * from Linpack by J. Dongarra * **************************************************************/ static void svd_dcopy(int n, double[] dx, int incx, double[] dy, int incy) { svd_dcopy(n, dx, 0, incx, dy, 0, incy); }
/************************************************************** * Function copies a vector x to a vector y * Based on Fortran-77 routine * from Linpack by J. Dongarra * **************************************************************/ static void svd_dcopy(int n, double[] dx, int incx, double[] dy, int incy) { svd_dcopy(n, dx, 0, incx, dy, 0, incy); }
LanStore[j + MAXLL] = svd_doubleArray(n, false, "LanStore[j]"); svd_dcopy(n, s, 1, LanStore[j + MAXLL], 1); break; case RETRQ: if (null == LanStore[j + MAXLL]) throw new Error(String.format( "svdLAS2: store (RETRQ) called on index %d (not allocated)", j + MAXLL)); svd_dcopy(n, LanStore[j + MAXLL], 1, s, 1); break; case STORP: LanStore[j] = svd_doubleArray(n, false, "LanStore[j]"); svd_dcopy(n, s, 1, LanStore[j], 1); break; case RETRP: svd_dcopy(n, LanStore[j], 1, s, 1); break;
LanStore[j + MAXLL] = svd_doubleArray(n, false, "LanStore[j]"); svd_dcopy(n, s, 1, LanStore[j + MAXLL], 1); break; case RETRQ: if (null == LanStore[j + MAXLL]) throw new Error(String.format( "svdLAS2: store (RETRQ) called on index %d (not allocated)", j + MAXLL)); svd_dcopy(n, LanStore[j + MAXLL], 1, s, 1); break; case STORP: LanStore[j] = svd_doubleArray(n, false, "LanStore[j]"); svd_dcopy(n, s, 1, LanStore[j], 1); break; case RETRP: svd_dcopy(n, LanStore[j], 1, s, 1); break;
if (id > 0 || step > 0 || rnm2 == 0) for (i = 0; i < n; i++) r[i] = random.nextDouble(); // svd_random2(&irand); svd_dcopy(n, wptr[0], 1, wptr[3], 1); svd_dcopy(n, wptr[0], 1, wptr[3], 1); rnm2 = svd_ddot(n, wptr[0], 1, wptr[3], 1); if (rnm2 > 0.0) break; svd_dcopy(n, wptr[0], 1, wptr[3], 1); t = svd_ddot(n, wptr[3], 1, wptr[0], 1); if (t <= eps * rnm2) t = 0.0;
if (id > 0 || step > 0 || rnm2 == 0) for (i = 0; i < n; i++) r[i] = random.nextDouble(); // svd_random2(&irand); svd_dcopy(n, wptr[0], 1, wptr[3], 1); svd_dcopy(n, wptr[0], 1, wptr[3], 1); rnm2 = svd_ddot(n, wptr[0], 1, wptr[3], 1); if (rnm2 > 0.0) break; svd_dcopy(n, wptr[0], 1, wptr[3], 1); t = svd_ddot(n, wptr[3], 1, wptr[0], 1); if (t <= eps * rnm2) t = 0.0;
void stpone(SMat A, double[][] wrkptr, double[] rnmp, double[] tolp, int n) { double t, rnm, anorm; double[] alf = wrkptr[6]; /* get initial vector; default is random */ rnm = startv(A, wrkptr, 0, n); if (rnm == 0.0 || ierr != 0) return; /* normalize starting vector */ t = 1.0 / rnm; svd_datx(n, t, wrkptr[0], 1, wrkptr[1], 1); svd_dscal(n, t, wrkptr[3], 1); /* take the first step */ svd_opb(A, wrkptr[3], wrkptr[0], OPBTemp); alf[0] = svd_ddot(n, wrkptr[0], 1, wrkptr[3], 1); svd_daxpy(n, -alf[0], wrkptr[1], 1, wrkptr[0], 1); t = svd_ddot(n, wrkptr[0], 1, wrkptr[3], 1); svd_daxpy(n, -t, wrkptr[1], 1, wrkptr[0], 1); alf[0] += t; svd_dcopy(n, wrkptr[0], 1, wrkptr[4], 1); rnm = Math.sqrt(svd_ddot(n, wrkptr[0], 1, wrkptr[4], 1)); anorm = rnm + fabs(alf[0]); rnmp[0] = rnm; tolp[0] = reps * anorm; return; }
void stpone(SMat A, double[][] wrkptr, double[] rnmp, double[] tolp, int n) { double t, rnm, anorm; double[] alf = wrkptr[6]; /* get initial vector; default is random */ rnm = startv(A, wrkptr, 0, n); if (rnm == 0.0 || ierr != 0) return; /* normalize starting vector */ t = 1.0 / rnm; svd_datx(n, t, wrkptr[0], 1, wrkptr[1], 1); svd_dscal(n, t, wrkptr[3], 1); /* take the first step */ svd_opb(A, wrkptr[3], wrkptr[0], OPBTemp); alf[0] = svd_ddot(n, wrkptr[0], 1, wrkptr[3], 1); svd_daxpy(n, -alf[0], wrkptr[1], 1, wrkptr[0], 1); t = svd_ddot(n, wrkptr[0], 1, wrkptr[3], 1); svd_daxpy(n, -t, wrkptr[1], 1, wrkptr[0], 1); alf[0] += t; svd_dcopy(n, wrkptr[0], 1, wrkptr[4], 1); rnm = Math.sqrt(svd_ddot(n, wrkptr[0], 1, wrkptr[4], 1)); anorm = rnm + fabs(alf[0]); rnmp[0] = rnm; tolp[0] = reps * anorm; return; }
svd_daxpy(n, -t, wptr[1], 1, wptr[0], 1); alf[j] = alf[j] + t; svd_dcopy(n, wptr[0], 1, wptr[4], 1); rnm = Math.sqrt(svd_ddot(n, wptr[0], 1, wptr[4], 1)); anorm = bet[j] + Math.abs(alf[j]) + rnm;
svd_daxpy(n, -t, wptr[1], 1, wptr[0], 1); alf[j] = alf[j] + t; svd_dcopy(n, wptr[0], 1, wptr[4], 1); rnm = Math.sqrt(svd_ddot(n, wptr[0], 1, wptr[4], 1)); anorm = bet[j] + Math.abs(alf[j]) + rnm;