diff options
Diffstat (limited to 'gsl-1.9/doc/examples/eigen.c')
-rw-r--r-- | gsl-1.9/doc/examples/eigen.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/gsl-1.9/doc/examples/eigen.c b/gsl-1.9/doc/examples/eigen.c new file mode 100644 index 0000000..a24c912 --- /dev/null +++ b/gsl-1.9/doc/examples/eigen.c @@ -0,0 +1,50 @@ +#include <stdio.h> +#include <gsl/gsl_math.h> +#include <gsl/gsl_eigen.h> + +int +main (void) +{ + double data[] = { 1.0 , 1/2.0, 1/3.0, 1/4.0, + 1/2.0, 1/3.0, 1/4.0, 1/5.0, + 1/3.0, 1/4.0, 1/5.0, 1/6.0, + 1/4.0, 1/5.0, 1/6.0, 1/7.0 }; + + gsl_matrix_view m + = gsl_matrix_view_array (data, 4, 4); + + gsl_vector *eval = gsl_vector_alloc (4); + gsl_matrix *evec = gsl_matrix_alloc (4, 4); + + gsl_eigen_symmv_workspace * w = + gsl_eigen_symmv_alloc (4); + + gsl_eigen_symmv (&m.matrix, eval, evec, w); + + gsl_eigen_symmv_free (w); + + gsl_eigen_symmv_sort (eval, evec, + GSL_EIGEN_SORT_ABS_ASC); + + { + int i; + + 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"); + } + } + + gsl_vector_free (eval); + gsl_matrix_free (evec); + + return 0; +} |