// dsygv.cc // 実対称行列の一般化固有値方程式を解く #include extern "C" { void dsygv_ ( const int& ITYPE, const char& JOBZ, const char& UPLO, const int& N, double** A, const int& LDA, double** B, const int& LDB, double* W, double* WORK, const int& LWORK, int& INFO, int JOBZlen, int UPLOlen ); }; // 実対称行列 H,S の一般化固有値方程式 H x = E S x を解く簡易関数 // Input: H[N][N], S[N][N], Output: U[N][N], E[N] // ただし、H[i][j<=i] S[i][j<=i] の下三角しか参照されない // U^\dagger H U が対角行列、U^\dagger S U が単位行列 // template int dsygv( double H[N][N], double S[N][N], double U[N][N], double E[N] ) { int i, j, info; static double work[4*N]; static double B[N][N]; for( i=0; i