void TNqrsolve(double **aIn, double *bIn, double *xOut, int msize, double &det, int &info){ double *a; a = qr_ctof(aIn, msize, msize); double **Atemp = new double *[msize]; for(int i = 0 ; i <msize; i++){ Atemp[i] = new double[msize]; } double *b = new double[msize]; for(int i =0 ; i < msize; i++){ b[i]=bIn[i]; } double* tau = new double[msize]; int tempinfo=0; tempinfo=geqrf(msize, msize, a, msize, tau); if(tempinfo != 0)info=tempinfo; qr_ftoc(a, Atemp, msize, msize); det=0; for(int i =0; i < msize; i++){ det += log(fabs(Atemp[i][i])); } tempinfo=0; tempinfo=ormqr('L', 'T', msize, 1, msize, a, msize, tau, b, msize); if(tempinfo != 0)info=tempinfo; tempinfo=0; tempinfo=trtrs('U', 'N', 'N', msize, 1, a, msize, b, msize); if(tempinfo != 0)info=tempinfo; for(int i =0; i < msize; i++){ xOut[i] = b[i]; } //tempinfo = trrfs('U', 'N', 'N', msize, 1, a, msize, bIn, msize, xOut, msize); delete[] a; delete[] tau; delete[] b; for(int i = 0 ; i <msize; i++){ delete[] Atemp[i]; } delete[] Atemp; }
/* Function: expand * * Computes the eigenvectors of a generalized eigenvalue problem after completion of <Lapack::solve>. * * Parameters: * B - Right-hand side matrix. * ev - Array of eigenvectors. */ void expand(K* const& B, K* const* const ev) const { int info; trtrs("L", "T", "N", &(Eigensolver<K>::_n), &(Eigensolver<K>::_nu), B, &(Eigensolver<K>::_n), *ev, &(Eigensolver<K>::_n), &info); }