00001 #ifndef _SOLVE_POLY_ROOT_H
00002 #define _SOLVE_POLY_ROOT_H
00003
00004
00005
00006
00007 #include <stdlib.h>
00008 #include <math.h>
00009 #include <stdlib.h>
00010 #include <cpl.h>
00011
00012
00013
00014
00015
00016 #define MAT(m,i,j,n) ((m)[(i)*(n) + (j)])
00017
00018
00019 #define FMAT(m,i,j,n) ((m)[((i)-1)*(n) + ((j)-1)])
00020
00021
00022 #undef __BEGIN_DECLS
00023 #undef __END_DECLS
00024 #ifdef __cplusplus
00025 # define __BEGIN_DECLS extern "C" {
00026 # define __END_DECLS }
00027 #else
00028 # define __BEGIN_DECLS
00029 # define __END_DECLS
00030 #endif
00031
00032 typedef double * gsl_complex_packed_ptr ;
00033
00034 void balance_companion_matrix (double *m, size_t nc);
00035 int qr_companion (double *h, size_t nc, gsl_complex_packed_ptr z);
00036 void set_companion_matrix (const double *a, size_t n, double *m);
00037
00038 __BEGIN_DECLS
00039
00040
00041
00042 typedef struct
00043 {
00044 size_t nc ;
00045 double * matrix ;
00046 }
00047 gsl_poly_complex_workspace ;
00048
00049 gsl_poly_complex_workspace * gsl_poly_complex_workspace_alloc (size_t n);
00050 void gsl_poly_complex_workspace_free (gsl_poly_complex_workspace * w);
00051
00052 int
00053 gsl_poly_complex_solve (const double * a, size_t n,
00054 gsl_poly_complex_workspace * w,
00055 gsl_complex_packed_ptr z);
00056
00057
00058
00059 __END_DECLS
00060
00061 #endif