|
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 |
}
|