|
Packit |
67cb25 |
#include <stdio.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_math.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_eigen.h>
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
main (void)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double data[] = { 1.0 , 1/2.0, 1/3.0, 1/4.0,
|
|
Packit |
67cb25 |
1/2.0, 1/3.0, 1/4.0, 1/5.0,
|
|
Packit |
67cb25 |
1/3.0, 1/4.0, 1/5.0, 1/6.0,
|
|
Packit |
67cb25 |
1/4.0, 1/5.0, 1/6.0, 1/7.0 };
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_matrix_view m
|
|
Packit |
67cb25 |
= gsl_matrix_view_array (data, 4, 4);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_vector *eval = gsl_vector_alloc (4);
|
|
Packit |
67cb25 |
gsl_matrix *evec = gsl_matrix_alloc (4, 4);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_eigen_symmv_workspace * w =
|
|
Packit |
67cb25 |
gsl_eigen_symmv_alloc (4);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_eigen_symmv (&m.matrix, eval, evec, w);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_eigen_symmv_free (w);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_eigen_symmv_sort (eval, evec,
|
|
Packit |
67cb25 |
GSL_EIGEN_SORT_ABS_ASC);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
int i;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
for (i = 0; i < 4; i++)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
double eval_i
|
|
Packit |
67cb25 |
= gsl_vector_get (eval, i);
|
|
Packit |
67cb25 |
gsl_vector_view evec_i
|
|
Packit |
67cb25 |
= gsl_matrix_column (evec, i);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
printf ("eigenvalue = %g\n", eval_i);
|
|
Packit |
67cb25 |
printf ("eigenvector = \n");
|
|
Packit |
67cb25 |
gsl_vector_fprintf (stdout,
|
|
Packit |
67cb25 |
&evec_i.vector, "%g");
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
gsl_vector_free (eval);
|
|
Packit |
67cb25 |
gsl_matrix_free (evec);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return 0;
|
|
Packit |
67cb25 |
}
|