Blame doc/examples/eigen.c

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
}