# include # include # include using namespace std; # include "eigs.hpp" //****************************************************************************80 complex *eigs ( int n, double *A ) //****************************************************************************80 // // Purpose: // // eigs() computes the eigenvalues of a real matrix in general storage. // // Discussion: // // The computation is done by calling the lapack() function dgeev() // // Licensing: // // This code is distributed under the MIT license. // // Modified: // // 06 June 2024 // // Author: // // John Burkardt // { int i; int info; char jobvl; char jobvr; complex *lambda; int lda = n; int ldvl = 1; int ldvr = 1; int lwork; double *vl; double *vr; double *wi; double *work; double *wr; jobvl = 'N'; jobvr = 'N'; lda = n; wr = new double[n]; wi = new double[n]; vl = NULL; ldvl = 1; vr = NULL; ldvr = 1; work = new double[3*n]; lwork = 3 * n; dgeev_ ( &jobvl, &jobvr, &n, A, &lda, wr, wi, vl, &ldvl, vr, &ldvr, work, &lwork, &info ); lambda = new complex [n]; for ( i = 0; i < n; i++ ) { lambda[i] = complex ( wr[i], wi[i] ); } delete [] wi; delete [] work; delete [] wr; return lambda; }