2 #include <gsl/gsl_math.h>
3 #include <gsl/gsl_eigen.h>
8 double data[] = { 1.0 , 1/2.0, 1/3.0, 1/4.0,
9 1/2.0, 1/3.0, 1/4.0, 1/5.0,
10 1/3.0, 1/4.0, 1/5.0, 1/6.0,
11 1/4.0, 1/5.0, 1/6.0, 1/7.0 };
14 = gsl_matrix_view_array (data, 4, 4);
16 gsl_vector *eval = gsl_vector_alloc (4);
17 gsl_matrix *evec = gsl_matrix_alloc (4, 4);
19 gsl_eigen_symmv_workspace * w =
20 gsl_eigen_symmv_alloc (4);
22 gsl_eigen_symmv (&m.matrix, eval, evec, w);
24 gsl_eigen_symmv_free (w);
26 gsl_eigen_symmv_sort (eval, evec,
27 GSL_EIGEN_SORT_ABS_ASC);
32 for (i = 0; i < 4; i++)
35 = gsl_vector_get (eval, i);
36 gsl_vector_view evec_i
37 = gsl_matrix_column (evec, i);
39 printf ("eigenvalue = %g\n", eval_i);
40 printf ("eigenvector = \n");
41 gsl_vector_fprintf (stdout,
42 &evec_i.vector, "%g");
46 gsl_vector_free (eval);
47 gsl_matrix_free (evec);