help-gsl
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: eigensystem


From: Patrick Alken
Subject: Re: eigensystem
Date: Tue, 19 Jan 2021 15:38:29 -0700
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0

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: pdupre@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.alken@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: pdupre@gmx.com
>>>  Laboratoire interdisciplinaire Carnot de Bourgogne
>>>  9 Avenue Alain Savary, BP 47870, 21078 DIJON Cedex FRANCE
>>>  Tel: +33 (0)380395988
>>> ===========================================================================
>>>
>>>
>>
>>




reply via email to

[Prev in Thread] Current Thread [Next in Thread]