// zhbev.cc // 複素エルミート行列の固有値方程式を解く #include #include typedef std::complex Complex; extern "C" { void zhbev_ ( const char& JOBZ, const char& UPLO, const int& N, const int& KD, Complex** AB, const int& LDAB, double* W, Complex** Z, const int& LDZ, Complex* WORK, double* RWORK, int& INFO, int JOBZlen, int UPLOlen ); }; // 複素エルミート3重帯行列 H の固有値方程式 H x = E x を解く簡易関数 // Input: H[2][N], Output: U[N][N], E[N] // H[0][N] に対角成分、H[1][N] 下副対角成分 // U^\dagger H U が対角行列となる // template int zhbev3( Complex H[2][N], Complex U[N][N], double E[N] ) { int i, j, info; static Complex cwork[4*N]; static double rwork[4*N]; static Complex AB[N][N]; for( j=0; j int zhbev5( Complex H[3][N], Complex U[N][N], double E[N] ) { int i, j, info; static Complex cwork[4*N]; static double rwork[4*N]; static Complex AB[N][N]; for( j=0; j