CVector SVD(const CMatrix& A) { CMatrix a; A.Transposed(a); int nRows=A.Rows(); int nCols=A.Cols(); int info; int lda = MAX(nRows,1); int lwork= 6*MIN(nRows,nCols) + nRows + nCols; CVector s(MIN(nRows,nCols)); double *work = new double[lwork]; // char jobu='N'; // int ldu=1; // char jobvt='N'; // int ldvt=1; // dgesvd_ (&jobu, &jobvt, &nRows, &nCols, a[0], &lda, &(s[0]), NULL, &ldu, NULL, &ldvt,work, &lwork, &info); // assert(info>=0); // delete [] work; return s; }
int EigenSolutionsSym(CMatrix& Q, CVector& b) { assert(Q.Rows() == Q.Cols()); int n = Q.Rows(); char jobz='V', uplo='U'; int info, lwork=6*n; // b.Resize(n); // double* work = new double[lwork]; // dsyev_(&jobz, &uplo, &n, Q[0], &n, &b[0], work, &lwork, &info); // delete [] work; return info; }