//#include #include #include #include #include #include #include #include #include static void init (){ gsl_ieee_env_setup (); }//init static void check (unsigned n, double * mat){ double d = 0.0; unsigned n2 = n*n; for (unsigned i = 0; i < n2; i++){ double el = mat[i]; d += el * el; }//i printf ("Hilbert-Schmidt-Norm = %f\n",sqrt(d)); }//check static void eigen (unsigned n, double * mat){ gsl_vector * eval2 = gsl_vector_alloc(n); gsl_eigen_symm_workspace * w1 = gsl_eigen_symm_alloc (n); gsl_matrix_view matView = gsl_matrix_view_array (mat, n, n); gsl_eigen_symm(&matView.matrix, eval2, w1); printf ("Eigenwerte :\n"); for (unsigned i = 0; i < n; i++){ printf ("%u\t%f\n",i,gsl_vector_get (eval2, i)); }//i }//eigen int main (int argc, char * argv[]){ int rc = 0; if (argc > 1){ FILE * fp = fopen (argv[1],"rb"); if (fp != NULL){ unsigned n = 0; if (fread(&n,sizeof(n),1,fp) != 1){ perror(""); fprintf (stderr,"Kann Datei %s nicht lesen\n", argv[1]); rc = 102; } else { printf ("n = %u\n",n); double * mat = new double[n*n]; if (fread(mat,sizeof(mat[0])*n*n,1,fp) != 1){ perror(""); fprintf (stderr,"Kann Datei %s nicht lesen\n", argv[1]); rc = 103; } else { check(n,mat); init(); //885 statt n : auch loop //884 statt n : kein loop eigen(n,mat); } delete [] mat; } fclose(fp); } else { perror(""); fprintf (stderr,"Kann Datei %s nicht öffnen\n", argv[1]); rc = 101; } } else { fprintf (stderr,"Keine Datei angegeben !\n"); rc = 100; } printf ("Ende eigenvals, rc = %d\n",rc); return rc; }