FirstIndexLast

[bug-gsl] Same eigenvector but different eigenvalues - Why? (2008-11-13)

From: "Antonio Divisato" <divisato@.........>
Subject: Same eigenvector but different eigenvalues - Why?
Date: Thu, 13 Nov 2008 11:00:29 +0100
To: help-gsl@gnu.org
Cc: bug-gsl@gnu.org

*Hi, I'm italian student. First of all sorry for my english.
I have a problem when I use GSL to test an example on classical scaling:
I have this matrix *
A =

20.52000 1.64000 -18.08000 -4.09000
1.64000 -0.83000 2.05000 -2.87000
-18.08000 2.05000 11.39000 4.63000
-4.09000 -2.87000 4.63000 2.33000

*and I want the eigendecomposition. So I write this code:*

int main(void) {

int i=0, j=0;
double nm;

gsl_vector *eval;
gsl_matrix *evec;

gsl_matrix *matr=gsl_matrix_alloc(4,4);
gsl_matrix_set(matr,0,0,20.52);
gsl_matrix_set(matr,0,1,1.64);
gsl_matrix_set(matr,0,2,-18.08);
gsl_matrix_set(matr,0,3,-4.09);

gsl_matrix_set(matr,1,0,1.64);
gsl_matrix_set(matr,1,1,-0.83);
gsl_matrix_set(matr,1,2,2.05);
gsl_matrix_set(matr,1,3,-2.87);

gsl_matrix_set(matr,2,0,-18.08);
gsl_matrix_set(matr,2,1,2.05);
gsl_matrix_set(matr,2,2,11.39);
gsl_matrix_set(matr,2,3,4.63);

gsl_matrix_set(matr,3,0,-4.09);
gsl_matrix_set(matr,3,1,-2.87);
gsl_matrix_set(matr,3,2,4.63);
gsl_matrix_set(matr,3,3,2.33);


eval = gsl_vector_alloc(4);
evec = gsl_matrix_alloc(4,4);
gsl_eigen_symmv_workspace *w = gsl_eigen_symmv_alloc(4);
gsl_eigen_symmv(matr,eval,evec,w);
gsl_eigen_symmv_free (w);

gsl_eigen_symmv_sort(eval,evec,GSL_EIGEN_SORT_ABS_ASC);

for (i = 0; i < 4; i++)
{
double eval_i
= gsl_vector_get (eval, i);
gsl_vector_view evec_i
= gsl_matrix_column (evec, i);

printf ("eigenvalue = %g\n", eval_i);
printf ("eigenvector = \n");
gsl_vector_fprintf (stdout,
&evec_i.vector, "%g");
}
return 0;
}

The problem is that I have this result:
eigenvalue = -3.28845e-15
eigenvector =
-0.5
-0.5
-0.5
-0.5
eigenvalue = -6.53416
eigenvector =
0.0405866
-0.614856
-0.190051
0.76432
eigenvalue = 11.1461
eigenvector =
0.387874
-0.609699
0.586947
-0.365121
eigenvalue = -71.4219
eigenvector =
0.773244
0.0147966
-0.607761
-0.180279
*
While my book and OCTAVE says:*

octave-3.0.0:3> A=[20.52 1.64 -18.08 -4.09; 1.64 -0.83 2.05 -2.87; -18.08
2.05 11.39 4.63; -4.09 -2.87 4.63 2.33]
A =

20.52000 1.64000 -18.08000 -4.09000
1.64000 -0.83000 2.05000 -2.87000
-18.08000 2.05000 11.39000 4.63000
-4.09000 -2.87000 4.63000 2.33000

octave-3.0.0:4> [EVECT,EVAL]=eig(A)
EVECT =

-0.388034 0.499844 -0.041102 -0.773237
0.609619 0.500918 0.614189 -0.014765
-0.587093 0.500013 0.189536 0.607770
0.364851 0.499223 -0.764957 0.180282

EVAL =

-5.56580 0.00000 0.00000 0.00000
0.00000 -0.00750 0.00000 0.00000
0.00000 0.00000 3.26739 0.00000
0.00000 0.00000 0.00000 35.71592

*So I have the same eigenvector but different eigenvalues. Why? Can you help
me?*

Bye
Antonio Divisato