output from eig() is complex?

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

output from eig() is complex?

Mario Storti-3

I want to compute the eigenvalues of  a symmetric matrix and sort them
as real  numbers  but   I  don't  obtained the  expected   result. For
instance:

octave:7> A=rand(10);
octave:8> A=A+A';
octave:9> sort(eig(A))
ans =

   0.0089208
   0.5152296
  -0.5608954
  -0.6509429
   0.9682804
   1.5698353
   1.9441555
  -2.0148139
  -2.5246725
   9.5114825

My  interpretation is that  Octave is sorting   the vector by absolute
value since this is the action for complex numbers, and in general the
result from  the  eig()   operation   should be   a list  of   complex
numbers. However the result of the operation is strictly real:

octave:18> v=eig(A);
octave:19> whos

*** local user variables:

prot  type               rows   cols  name
====  ====               ====   ====  ====
 wd   real matrix          10     10  A
 wd   real matrix          10      1  v

I can solve the problem easily but I wonder if  this is a sort of bug,
since splitting the   sort(eig(A)) in two  commands  gives the correct
result:

octave:20> v=eig(A); sort(v)
ans =

  -2.5246725
  -2.0148139
  -0.6509429
  -0.5608954
   0.0089208
   0.5152296
   0.9682804
   1.5698353
   1.9441555
   9.5114825

This is also a source of incompatibility with Matlab, since with it I
can use always sort(eig(A)) for symmetric matrices.

Octave version: 1.1.1
internal variable: ok_to_lose_imaginary_part = warn

Mario

--
%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%%%%%%<>%
Mario Alberto Storti               |  Fax: (54)(42) 55.09.44    |
Grupo de Tecnologia Mecanica       |  Tel: (54)(42) 55.91.75    |
INTEC, Guemes 3450 - 3000 Santa Fe |  http://venus.unl.edu.ar/  |
Argentina                          |  Home: Gob. Vera 3161      |
Reply: [hidden email]  |        (54)(42) 55.00.23   |

Reply | Threaded
Open this post in threaded view
|

output from eig() is complex?

John W. Eaton-6
On 19-Jul-1996, Mario Storti <[hidden email]> wrote:

: I want to compute the eigenvalues of  a symmetric matrix and sort them
: as real  numbers  but   I  don't  obtained the  expected   result. For
: instance:
:
: octave:7> A=rand(10);
: octave:8> A=A+A';
: octave:9> sort(eig(A))
: ans =
:
:    0.0089208
:    0.5152296
:   -0.5608954
:   -0.6509429
:    0.9682804
:    1.5698353
:    1.9441555
:   -2.0148139
:   -2.5246725
:    9.5114825
:
: My  interpretation is that  Octave is sorting   the vector by absolute
: value since this is the action for complex numbers, and in general the
: result from  the  eig()   operation   should be   a list  of   complex
: numbers.

Correct.

The problem is that Octave 1.1.1 doesn't do automatic type conversions
in some places that it should.  This problem should be fixed in the
next release.

Thanks,

jwe