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