2 #include <gsl/gsl_math.h>
3 #include <gsl/gsl_eigen.h>
8 double data[] = { -1.0, 1.0, -1.0, 1.0,
11 64.0, 16.0, 4.0, 1.0 };
14 = gsl_matrix_view_array (data, 4, 4);
16 gsl_vector_complex *eval = gsl_vector_complex_alloc (4);
17 gsl_matrix_complex *evec = gsl_matrix_complex_alloc (4, 4);
19 gsl_eigen_nonsymmv_workspace * w =
20 gsl_eigen_nonsymmv_alloc (4);
22 gsl_eigen_nonsymmv (&m.matrix, eval, evec, w);
24 gsl_eigen_nonsymmv_free (w);
26 gsl_eigen_nonsymmv_sort (eval, evec,
27 GSL_EIGEN_SORT_ABS_DESC);
32 for (i = 0; i < 4; i++)
35 = gsl_vector_complex_get (eval, i);
36 gsl_vector_complex_view evec_i
37 = gsl_matrix_complex_column (evec, i);
39 printf ("eigenvalue = %g + %gi\n",
40 GSL_REAL(eval_i), GSL_IMAG(eval_i));
41 printf ("eigenvector = \n");
42 for (j = 0; j < 4; ++j)
44 gsl_complex z = gsl_vector_complex_get(&evec_i.vector, j);
45 printf("%g + %gi\n", GSL_REAL(z), GSL_IMAG(z));
50 gsl_vector_complex_free(eval);
51 gsl_matrix_complex_free(evec);