Exemplo n.º 1
0
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;
}
Exemplo n.º 2
0
 /* 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);
 }