The GSL algorithm does not check if the matrix is diagonalizable, so it assumes that the input matrix is. This is the same behavior as LAPACK DGEEV - in fact I ran your matrix through lapack and found the same answer.
In order to check if your matrix is diagonalizable, one strategy is to compute the condition number of the eigenvector matrix V (after the nonsymmv computation). If the condition number is large (say > 1e7) then that is a bad sign. I don't think there is an explicit routine in GSL atm to compute the condition number of a complex matrix, but a quick way to do it would be to compute the LU decomposition of V, and then look at the diagonal elements of the U factor. If any of them are tiny, its badly conditioned. I can add a function to compute a more accurate estimate of the condition number if needed. Patrick On 1/19/21 1:51 PM, Patrick Dupre wrote: > gsl_eigen_nonsymmv_workspace > has no member n_evals > > issue: > > Diagonalizing > double data_3 [] = { 0.0, 0.0, 1.0, > 0.0, 0.0, 0.0, > 0.0, 0.0, 0.0 } ; > > I get > eigenvalue = 0 +0i > eigenvector = > 1 +0i > 0 +0i > 0 +0i > eigenvalue = 0 +0i > eigenvector = > 0 +0i > 1 +0i > 0 +0i > eigenvalue = 0 +0i > eigenvector = > -1 +0i > 0 +0i > 3.00625e-292 +0i > > > which is wrong. > The last eigenvector is not correct because this matrix is not diagonalizable. > > I need to identify such matrices. > > > =========================================================================== > Patrick DUPRÉ | | email: pdu...@gmx.com > Laboratoire interdisciplinaire Carnot de Bourgogne > 9 Avenue Alain Savary, BP 47870, 21078 DIJON Cedex FRANCE > Tel: +33 (0)380395988 > =========================================================================== > > >> Sent: Tuesday, January 19, 2021 at 6:56 PM >> From: "Patrick Alken" <patrick.al...@colorado.edu> >> To: help-gsl@gnu.org >> Subject: Re: eigensystem >> >> What do you mean by handle it? According to the documentation, if the >> function cannot compute all eigenvalues, an error code is returned. In >> the case of gsl_eigen_nonsymm, the number of converged eigenvalues is >> stored in w->n_evals. >> >> Patrick >> >> On 1/19/21 10:33 AM, Patrick Dupre wrote: >>> Hello, >>> >>> Is there a way to handle the possible error of gsl_eigen_nonsymmv ? >>> >>> For example, when the matrix is not diagonalizable. >>> >>> Thanks >>> >>> =========================================================================== >>> Patrick DUPRÉ | | email: pdu...@gmx.com >>> Laboratoire interdisciplinaire Carnot de Bourgogne >>> 9 Avenue Alain Savary, BP 47870, 21078 DIJON Cedex FRANCE >>> Tel: +33 (0)380395988 >>> =========================================================================== >>> >>> >> >>