// zheev.cc // 複素エルミート行列の固有値方程式を解く #include #include typedef std::complex Complex; extern "C" { void zheev_ ( const char& JOBZ, const char& UPLO, const int& N, Complex** A, const int& LDA, double* W, Complex* WORK, const int& LWORK, double* RWORK, 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 zheev( Complex H[N][N], Complex U[N][N], double E[N] ) { int i, j, info; static Complex cwork[4*N]; static double rwork[4*N]; for( i=0; i