Blame doc/examples/eigen_nonsymm.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.0, -1.0, 1.0,
Packit 67cb25
                    -8.0, 4.0, -2.0, 1.0,
Packit 67cb25
                    27.0, 9.0, 3.0, 1.0,
Packit 67cb25
                    64.0, 16.0, 4.0, 1.0 };
Packit 67cb25
Packit 67cb25
  gsl_matrix_view m 
Packit 67cb25
    = gsl_matrix_view_array (data, 4, 4);
Packit 67cb25
Packit 67cb25
  gsl_vector_complex *eval = gsl_vector_complex_alloc (4);
Packit 67cb25
  gsl_matrix_complex *evec = gsl_matrix_complex_alloc (4, 4);
Packit 67cb25
Packit 67cb25
  gsl_eigen_nonsymmv_workspace * w = 
Packit 67cb25
    gsl_eigen_nonsymmv_alloc (4);
Packit 67cb25
  
Packit 67cb25
  gsl_eigen_nonsymmv (&m.matrix, eval, evec, w);
Packit 67cb25
Packit 67cb25
  gsl_eigen_nonsymmv_free (w);
Packit 67cb25
Packit 67cb25
  gsl_eigen_nonsymmv_sort (eval, evec, 
Packit 67cb25
                           GSL_EIGEN_SORT_ABS_DESC);
Packit 67cb25
  
Packit 67cb25
  {
Packit 67cb25
    int i, j;
Packit 67cb25
Packit 67cb25
    for (i = 0; i < 4; i++)
Packit 67cb25
      {
Packit 67cb25
        gsl_complex eval_i 
Packit 67cb25
           = gsl_vector_complex_get (eval, i);
Packit 67cb25
        gsl_vector_complex_view evec_i 
Packit 67cb25
           = gsl_matrix_complex_column (evec, i);
Packit 67cb25
Packit 67cb25
        printf ("eigenvalue = %g + %gi\n",
Packit 67cb25
                GSL_REAL(eval_i), GSL_IMAG(eval_i));
Packit 67cb25
        printf ("eigenvector = \n");
Packit 67cb25
        for (j = 0; j < 4; ++j)
Packit 67cb25
          {
Packit 67cb25
            gsl_complex z = 
Packit 67cb25
              gsl_vector_complex_get(&evec_i.vector, j);
Packit 67cb25
            printf("%g + %gi\n", GSL_REAL(z), GSL_IMAG(z));
Packit 67cb25
          }
Packit 67cb25
      }
Packit 67cb25
  }
Packit 67cb25
Packit 67cb25
  gsl_vector_complex_free(eval);
Packit 67cb25
  gsl_matrix_complex_free(evec);
Packit 67cb25
Packit 67cb25
  return 0;
Packit 67cb25
}