00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00025 #ifndef MATH_ADD_H
00026 # define MATH_ADD_H
00027
00028 #ifndef _ISOC99_SOURCE
00029 #define _ISOC99_SOURCE
00030 #endif
00031
00032 #include <stdlib.h>
00033 #include <limits.h>
00034 #include <float.h>
00035 #include <math.h>
00036 #include <string.h>
00037
00038 #include <gsl/gsl_spline.h>
00039 #include <gsl/gsl_sf_bessel.h>
00040 #include <gsl/gsl_matrix.h>
00041 #include <gsl/gsl_vector.h>
00042 #include <gsl/gsl_linalg.h>
00043 #include <gsl/gsl_cblas.h>
00044 #include <gsl/gsl_blas.h>
00045 #include <gsl/gsl_rng.h>
00046 #include <gsl/gsl_randist.h>
00047
00048 #include "helper.h"
00049 #include "definitions.h"
00050 #include "complex.h"
00051
00053 #define MAX(a,b) ((a) > (b) ? (a):(b))
00054
00055 #define MIN(a,b) ((a) < (b) ? (a):(b))
00056
00057 #define SQR(a) ((a)*(a))
00058
00059 #define ABS(a) ( ((a)<0) ? (-1*(a)) : (a) )
00060
00061 #define ISODD(x) ((((x)%2)==0)? (0) : (1))
00062
00064 #define CHECK_BIT(var,pos) ((var) & (1<<(pos)))
00065
00066 # define PI 3.14159265358979323846
00067
00068 #ifdef __cplusplus
00069 extern "C" {
00070 #endif
00071
00072
00073
00074 double glog(double v, int b);
00075 double mad(const double *data, int n);
00076 int abscmp(const void *p1, const void *p2);
00077 double vnorm(const double *v, int n, int p);
00078 int sgn(int x);
00079 double maxel(double *v, int n);
00080 int maxeli(int *v, int n);
00081 int closest_index(const double *v, int n, double c);
00082 double* sampled_line(double *ntimes, int n, double start, double end);
00083 double* lininterp(const double *x1, const double *y1, int n1,
00084 const double *x2, double *y2, int n2);
00085 int* linspace(int first, int last);
00086 double* linspace_dbl(double first, double last, double step, double *v, int *n);
00087 double weighted_median_from_unsorted(const double *d, const double *w, int n);
00088 int cmpdouble(double d1, double d2, int precision);
00089
00090 void swap2i(int *v1, int *v2);
00091 void swap2d(double *v1, double *v2);
00092
00093 double* flip_array( double *v, int n );
00094
00095 double gaussian( double x, double sigma, double mu );
00096
00097 int next_pow2( int n );
00098 int iremainder( double x, double y);
00099 Complex* expand_polynomial_from_roots( const Complex *roots, int n, Complex *coeffs );
00100
00101
00102
00103
00104 void fft(double *data, unsigned long nn, int isign);
00105
00106
00107
00108
00109
00110 double* sigext_zeros(double *data, int ns, int n);
00111 double* sigext_zerosr(double *data, int ns, int n);
00112 double* sigext_sym(double *data, int ns, int n);
00113 double* sigext_smooth(double *data, int ns, int n);
00114
00115
00116
00117
00118
00119 double drawsample_nearest_neighbour( const double *v, int n, double x );
00120 double* resample_linear( const double *s, int n, int newn, double *news );
00121 double* resample_nearest_neighbour( const double *s, int n, int newn, double *news );
00122 double* resample_gsl( const double *s, int n, int newn, double *news, const gsl_interp_type *method );
00123
00124
00125
00126 double rmse(const double *r, const double *d, int n);
00127 double snr (const double *r, const double *d, int n);
00128
00129
00130
00131
00132
00133 double dblp_min( double *v, int n, int *idx );
00134 double dblp_max( double *v, int n, int *idx );
00135 double* dblp_init( double *v, int n, double val );
00136 void dblp_minus_scalar( double *v, int n, double val );
00137 double* dblp_complex_to_real( const Complex *vc, double *vr, int n );
00138 double dblp_euclidean_distance( const double *v1, const double *v2, int n );
00139 void dblp_shuffle_int( int *permut, int n );
00140 void dblp_print( double *v, int n );
00141 void dblp_print_int( int *v, int n );
00142 double dblp_mean( double *v, int n );
00143
00144
00145
00146
00147
00148 double** dblpp_delrow(double **m, int N, int n, int row);
00149 double** dblpp_delcol(double **m, int N, int n, int col);
00150 double dblpp_min(const double **m, int N, int n, int *i1, int *i2);
00151 double dblpp_max(const double **m, int N, int n, int *i1, int *i2);
00152 void dblpp_print(const double **m, int N, int n);
00153 double** dblpp_init(int N, int M);
00154 int** dblpp_init_int(int N, int M);
00155 void dblpp_divide_scalar(double **m, int N, int n, double s);
00156 void dblpp_add_scalar(double **m, int N, int n, double s);
00157 void dblpp_mul_scalar(double **m, int N, int n, double s);
00158 void dblpp_normalize_by_max( double **m, int M, int N );
00159 void dblpp_add_dblpp(double **m1, const double **m2, int N, int n);
00160 void dblpp_sub_dblpp(double **dest, const double **src, int N, int n);
00161 void dblpp_dottimes_dblpp( double **m1, const double **m2, int N, int M );
00162 void dblpp_copy( const double **src, double **dest, int N, int M );
00163 void scalar_minus_dblpp( double scalar, double **m, int N, int M );
00164 double** dblpp_rand( double **m, int N, int M, double lower, double upper );
00165 void dblpp_free(double **m, int N);
00166
00167 #ifdef __cplusplus
00168 }
00169 #endif
00170
00171 #endif