• API Main Page
  • Documentation
  • Modules
  • Data Structures
  • Files
  • File List
  • Globals

src/mathadd.h

Go to the documentation of this file.
00001 /***************************************************************************
00002  *   Copyright (C) 2008 by Matthias Ihrke   *
00003  *   mihrke@uni-goettingen.de   *
00004  *                                                                         *
00005  *   This program is free software; you can redistribute it and/or modify  *
00006  *   it under the terms of the GNU General Public License as published by  *
00007  *   the Free Software Foundation; either version 2 of the License, or     *
00008  *   (at your option) any later version.                                   *
00009  *                                                                         *
00010  *   This program is distributed in the hope that it will be useful,       *
00011  *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
00012  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
00013  *   GNU General Public License for more details.                          *
00014  *                                                                         *
00015  *   You should have received a copy of the GNU General Public License     *
00016  *   along with this program; if not, write to the                         *
00017  *   Free Software Foundation, Inc.,                                       *
00018  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
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  /* pi */
00067 
00068 #ifdef __cplusplus
00069 extern "C" {
00070 #endif
00071   /* -------- Math ----------- */  
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     -- Fourier methods
00103     ---------------------------------------------------------------------------- */
00104   void fft(double *data,  unsigned long nn, int isign);
00105   
00106 /* ---------------------------------------------------------------------------- 
00107    -- Signal extension routines                                              -- 
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       -- Interpolation
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       -- Merit Measures                                                         -- 
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       -- dblp ops                                                             -- 
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       -- Dblpp ops                                                             -- 
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

Generated on Fri Jun 25 2010 14:10:19 for libeegtools by  doxygen 1.7.0