home *** CD-ROM | disk | FTP | other *** search
/ Visual Basic Source Code / Visual Basic Source Code.iso / vbsource / optivc32 / vfstd.h < prev    next >
Encoding:
C/C++ Source or Header  |  1999-03-06  |  14.0 KB  |  304 lines

  1. /*  VFstd.h
  2.  
  3.   vector management functions:
  4.   manipulations on whole arrays or vectors of data type "float"
  5.   (real numbers)
  6.  
  7.   Copyright (c) 1996-1999 by Martin Sander
  8.   All Rights Reserved.
  9. */
  10.  
  11. #ifndef __VFSTD_H
  12. #define __VFSTD_H
  13. #if !defined( __VECLIB_H )
  14. #include <VecLib.h>
  15. #endif
  16.  
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20.  
  21. /*************************  Generation  **************************/
  22.  
  23. fVector   __vf  VF_vector( ui size );
  24. fVector   __vf  VF_vector0( ui size );
  25.  
  26. /***************  Addressing single vector elements ******************/
  27.  
  28. float _VFAR * VF_Pelement( fVector X, ui n );
  29.       /* returns a pointer to the n'th element of X. For the memory model
  30.          HUGE, the pointer is normalized. */
  31. #define VF_element( X, n )  (*VF_Pelement( X, n ))
  32.  
  33. /*******************  Initialization **********************************/
  34.  
  35. void  __vf  VF_equ0( fVector X, ui size );
  36. void  __vf  VF_equ1( fVector X, ui size );
  37. void  __vf  VF_equC( fVector X, ui size, float C );
  38. void  __vf  VF_equV( fVector Y, fVector X, ui size );
  39. void  __vf  VFx_equV( fVector Y, fVector X, ui size, float A, float B );
  40. void  __vf  VF_ramp( fVector X, ui size, float Start, float Rise );
  41. void  __vf  VF_Parzen( fVector X, ui size );
  42. void  __vf  VF_Welch( fVector X, ui size );
  43. void  __vf  VF_Hanning( fVector X, ui size );
  44. void  __vf  VF_comb( fVector X, ui size, unsigned step, float C );
  45. long  __vf  VF_random( fVector X, ui size, long seed,
  46.                        float MinVal, float MaxVal );
  47. long  __vf  VF_noise( fVector X, ui size, long seed, float Amp );
  48.             /* VF_random and VF_noise return a new seed value.
  49.                random quality of VF_random is much better      */
  50.  
  51. /***************  Data-type interconversions  *************************/
  52.        /* for rounding functions, see VFmath.h ! */
  53.  
  54. void  __vf   V_SItoF(  fVector Y, siVector X, ui size );
  55. void  __vf   V_ItoF(   fVector Y, iVector  X, ui size );
  56. void  __vf   V_LItoF(  fVector Y, liVector X, ui size );
  57. void  __vf   V_QItoF(  fVector Y, qiVector X, ui size );
  58.  
  59. void  __vf   V_UStoF(  fVector Y, usVector X, ui size );
  60. void  __vf   V_UtoF(   fVector Y, uVector  X, ui size );
  61. void  __vf   V_ULtoF(  fVector Y, ulVector X, ui size );
  62.  
  63. void  __vf   V_FtoD( dVector Y, fVector X, ui size );
  64. void  __vf   V_DtoF( fVector Y, dVector X, ui size );
  65. #ifdef __BORLANDC__   /* 80-bit IEEE numbers supported */
  66.     void  __vf   V_FtoE( eVector Y, fVector X, ui size );
  67.     void  __vf   V_EtoF( fVector Y, eVector X, ui size );
  68. #else  /* no IEEE number support with Visual C++ */
  69.     #define V_FtoE V_FtoD
  70.     #define V_EtoF V_DtoF
  71. #endif
  72.  
  73.  
  74. /****************  Index-oriented manipulations ***********************/
  75.  
  76. void  __vf  VF_reflect( fVector X, ui size );
  77. void  __vf  VF_rev( fVector Y, fVector X, ui size );
  78. #if defined (V_HUGE)
  79.     void  __vf  VF_rotate( fVector Y, fVector X, ui size, long pos );
  80. #else
  81.     void  __vf  VF_rotate( fVector Y, fVector X, ui size, int pos );
  82. #endif
  83. void  __vf  VF_delete( fVector X, ui size, ui pos );
  84. void  __vf  VF_insert( fVector X, ui size, ui pos, float C );
  85. void  __vf  VF_sort( fVector Y, fVector X, ui size, int dir );
  86. void  __vf  VF_sortind( uiVector Ind, fVector X, ui size, int dir );
  87. void  __vf  VF_subvector( fVector Y, ui sizey, fVector X, int samp );
  88. void  __vf  VF_indpick( fVector Y, uiVector Ind, ui sizey, fVector X );
  89. void  __vf  VF_indput(  fVector Y, fVector X, uiVector Ind, ui sizex );
  90. ui    __vf  VF_searchC( fVector X, ui size, float C, int mode );
  91. void  __vf  VF_searchV( uiVector Ind, fVector X, ui sizex,
  92.                                      fVector Tab, ui sizetab, int mode );
  93.  
  94. void  __vf  VF_polyinterpol( fVector Y, fVector X, ui sizex,
  95.                         fVector XTab, fVector YTab, ui sizetab, unsigned deg );
  96. void  __vf  VF_ratinterpol( fVector Y, fVector X, ui sizex,
  97.                         fVector XTab, fVector YTab, ui sizetab, unsigned deg );
  98. void  __vf  VF_splinederiv2( fVector Y2, fVector XTab, fVector YTab,
  99.                             ui tabsize, int specify, float Yp0, float Ypn );
  100. void  __vf  VF_splineinterpol( fVector Y, fVector X, ui sizex,
  101.                     fVector XTab, fVector YTab, fVector Y2Tab, ui sizetab );
  102.  
  103.  
  104. /***************** Functions of a sub-set of elements  ********************/
  105.  
  106. void  __vf  VF_subvector_equC(  fVector Y, ui subsiz, unsigned samp, float C );
  107. void  __vf  VF_subvector_equV(  fVector Y, ui subsiz, unsigned samp, fVector X );
  108.      /*  for arithmetic functions performed on subvectors, see <VFmath.h> */
  109.  
  110.  
  111. /**************** One-Dimensional Vector Operations ***********************/
  112.  
  113. float      __vf  VF_max( fVector X, ui size );
  114. float      __vf  VF_min( fVector X, ui size );
  115. float      __vf  VF_absmax( fVector X, ui size );
  116. float      __vf  VF_absmin( fVector X, ui size );
  117. int        __vf  VF_maxexp( fVector X, ui size );
  118. int        __vf  VF_minexp( fVector X, ui size );
  119. float      __vf  VF_maxind( ui _VFAR *Ind, fVector X, ui size );
  120. float      __vf  VF_minind( ui _VFAR *Ind, fVector X, ui size );
  121. float      __vf  VF_absmaxind( ui _VFAR *Ind, fVector X, ui size );
  122. float      __vf  VF_absminind( ui _VFAR *Ind, fVector X, ui size );
  123. ui         __vf  VF_localmaxima( uiVector Ind, fVector X, ui size );
  124. ui         __vf  VF_localminima( uiVector Ind, fVector X, ui size );
  125. void       __vf  VF_runmax( fVector Y, fVector X, ui size );
  126. void       __vf  VF_runmin( fVector Y, fVector X, ui size );
  127. float      __vf  VF_sum( fVector X, ui size );
  128. float      __vf  VF_prod( fVector X, ui size );
  129. void       __vf  VF_runsum( fVector Y, fVector X, ui size );
  130. void       __vf  VF_runprod( fVector Y, fVector X, ui size );
  131. int        __vf  VF_iselementC( fVector Tab, ui size, float C );
  132. ui         __vf  VF_iselementV( fVector Y, fVector X, ui sizex,
  133.                                 fVector Tab, ui sizetab );
  134.  
  135.  
  136. /**************** Statistical Functions and Building Blocks *************/
  137.  
  138. float   __vf  VF_mean( fVector X, ui size );
  139. float   __vf  VF_meanwW( fVector X, fVector Wt, ui size );
  140. float   __vf  VF_sumabs( fVector X, ui size );
  141. float   __vf  VF_meanabs( fVector X, ui size );
  142. float   __vf  VF_selected_mean( ui _VFAR *nsel, fVector X, ui size,
  143.                  float XMin, float XMax ); /* takes only x with Min<=x<=Max */
  144. float   __vf  VF_median( fVector X, ui size );
  145. float   __vf  VF_sumdevC( fVector X, ui size, float C );
  146. float   __vf  VF_sumdevV( fVector X, fVector Y, ui size );
  147. float   __vf  VF_avdevC( fVector X, ui size, float C );
  148. float   __vf  VF_avdevV( fVector X, fVector Y, ui size );
  149. float   __vf  VF_ssq( fVector X, ui size );  /* sum-of-squares */
  150. float   __vf  VF_rms( fVector X, ui size );  /* root of the mean square */
  151. float   __vf  VF_ssqdevC( fVector X, ui size, float C );
  152. float   __vf  VF_ssqdevV( fVector X, fVector Y, ui size );
  153. float   __vf  VF_meanvar(  float  _VFAR *Var, fVector X, ui size );
  154. float   __vf  VF_meanvarwW(  float  _VFAR *Var, fVector X, fVector Wt, ui size );
  155. float   __vf  VF_varianceC( fVector X, ui size, float C );
  156. float   __vf  VF_varianceV( fVector X, fVector Y, ui size );
  157. float   __vf  VF_varianceCwW( fVector X, fVector Wt, ui size, float C );
  158. float   __vf  VF_varianceVwW( fVector X, fVector Y, fVector Wt, ui size );
  159. float   __vf  VF_chi2( fVector X, fVector Y, fVector InvVar, ui size );
  160. float   __vf  VF_chiabs( fVector X, fVector Y, fVector Wt, ui size );
  161. float   __vf  VF_corrcoeff( fVector X, fVector Y, ui size,
  162.                             float Xmean, float Ymean );
  163. ui      __vf  VF_distribution( uiVector Abund, fVector Limits, ui nbins,
  164.                                fVector X, ui sizex, int mode );
  165.  
  166. void  __vf  VF_linregress( fVector Param, fVector X, fVector Y, ui size );
  167. void  __vf  VF_linregresswW( fVector Param, fVector X, fVector Y,
  168.                              fVector InvVar, ui size );
  169.      /* more linear and nonlinear data fitting routines need MatrixLib
  170.         and are declared in <MFstd.h> !                                */
  171.  
  172.  
  173. /*********  Fourier Transforms, Convolutions, Filtering  ****************/
  174.  
  175. #if defined __cplusplus && defined _CMATH_CLASSDEFS
  176. } // following function cannot be extern "C"
  177. #endif
  178. fComplex  __vf   VF_getRspEdit( void );
  179. #if defined __cplusplus && defined _CMATH_CLASSDEFS
  180. extern "C" {
  181. #endif
  182. void      __vf   VF_setRspEdit( fComplex Trunc );
  183. void  __vf   VFl_FFT( fVector Y, fVector X, ui size, int dir );
  184. void  __vf   VFl_filter( fVector Y, fVector X, fVector Flt, ui size );
  185. void  __vf   VFl_autocorr( fVector Y, fVector X, ui size );
  186. void  __vf   VFl_xcorr( fVector Z, fVector X, fVector Y, ui size );
  187. float __vf   VFl_spectrum( fVector Spc, ui specsiz, fVector X, ui xsiz,
  188.                            fVector Win );
  189.                            /* xsiz >= n*specsiz,  Winsiz = 2*specsiz ! */
  190. void  __vf   VFl_convolve( fVector Y, fVector Flt, fVector X,
  191.                            fVector Rsp, ui size );
  192. void  __vf   VFl_deconvolve( fVector Y, fVector Flt, fVector X,
  193.                              fVector Rsp, ui size );
  194. void  __vf   VFs_FFT( fVector Y, fVector X, ui size, int dir );
  195. void  __vf   VFs_filter( fVector Y, fVector X, fVector Flt, ui size );
  196. void  __vf   VFs_autocorr( fVector Y, fVector X, ui size );
  197. void  __vf   VFs_xcorr( fVector Z, fVector X, fVector Y, ui size );
  198. float __vf   VFs_spectrum( fVector Spc, ui specsiz, fVector X, ui xsiz,
  199.                            fVector Win );
  200. void  __vf   VFs_convolve( fVector Y, fVector Flt, fVector X,
  201.                            fVector Rsp, ui size );
  202. void  __vf   VFs_deconvolve( fVector Y, fVector Flt, fVector X,
  203.                              fVector Rsp, ui size );
  204.  
  205.  
  206. #if( defined( __LARGE__ ) || defined( __COMPACT__ ) )
  207.    #define VF_FFT         VFl_FFT
  208.    #define VF_convolve    VFl_convolve
  209.    #define VF_deconvolve  VFl_deconvolve
  210.    #define VF_filter      VFl_filter
  211.    #define VF_autocorr    VFl_autocorr
  212.    #define VF_xcorr       VFl_xcorr
  213.    #define VF_spectrum    VFl_spectrum
  214. #else
  215.    #define VF_FFT         VFs_FFT
  216.    #define VF_convolve    VFs_convolve
  217.    #define VF_deconvolve  VFs_deconvolve
  218.    #define VF_filter      VFs_filter
  219.    #define VF_autocorr    VFs_autocorr
  220.    #define VF_xcorr       VFs_xcorr
  221.    #define VF_spectrum    VFs_spectrum
  222. #endif
  223.  
  224. /********************** Analysis ****************************************/
  225.  
  226. void    __vf  VF_derivC( fVector Y, fVector X, ui size, float Deltat );
  227. void    __vf  VF_derivV( fVector Z, fVector X, fVector Y, ui size );
  228. float   __vf  VF_integralC( fVector X, ui size, float Deltat );
  229. void    __vf  VF_runintegralC( fVector Y, fVector X, ui size, float Deltat );
  230. float   __vf  VF_integralV( fVector X, fVector Y, ui size );
  231. void    __vf  VF_runintegralV( fVector Z, fVector X, fVector Y, ui size );
  232. void    __vf  VF_smooth( fVector Y, fVector X, ui size, unsigned deg );
  233. int     __vf  VF_ismonoton( fVector X, ui size );
  234.  
  235. /****************** Geometrical Vector Arithmetics **************************/
  236.  
  237. float     __vf  VF_scalprod( fVector X, fVector Y, ui size );
  238. void      __vf  VF_xprod( fVector Z, fVector X, fVector Y );
  239. float     __vf  VF_Euclid( fVector X, ui size );
  240.  
  241.  
  242. /***************************  Input and Output *****************************/
  243.  
  244. void  __vf    VF_fprint( FILE _VFAR *stream, fVector X, ui size, unsigned nperline, unsigned linewidth );
  245. #if !defined _Windows || defined __FLAT__ || defined _WIN32
  246.     void  __vf    VF_cprint( fVector X, ui size, unsigned nperline );
  247. #endif
  248. #define       VF_print( x, sz, npl )  VF_fprint( stdout, x, sz, npl, 80 )
  249.  /*  VF_print, VF_cprint are usable only for DOS and Win32 console!  */
  250. void  __vf    VF_write( FILE _VFAR *stream, fVector X, ui size  );
  251. void  __vf    VF_read( fVector X, ui size, FILE _VFAR *stream );
  252.                      /* VF_write, VF_read in ascii format */
  253. void  __vf    VF_nwrite( FILE _VFAR *stream, unsigned n, ui size, ... );
  254. void  __vf    VF_nread( unsigned n, ui size, FILE _VFAR *stream, ... );
  255. void  __vf    VF_setWriteFormat( char _VFAR *FormatString );
  256.                                             /* for VF_write and VF_nwrite */
  257. void  __vf    VF_setWriteSeparate( char _VFAR *SepString ); /* for VF_write */
  258. void  __vf    VF_setNWriteSeparate( char _VFAR *SepString ); /* for VF_nwrite */
  259. #ifdef V_HUGE
  260.     void  __vf    VF_store( FILE _VFAR *stream, fVector X, ui size );
  261.     void  __vf    VF_recall( fVector X, ui size, FILE _VFAR *stream );
  262. #else
  263.     #ifdef __cplusplus
  264.          void  inline VF_store( FILE _VFAR *stream, fVector X, ui size )
  265.          {    fwrite( X, sizeof(float), size, stream );
  266.          }
  267.          void  inline VF_recall( fVector X, ui size, FILE _VFAR *stream )
  268.          {    fread(  X, sizeof(float), size, stream );
  269.          }
  270.     #else
  271.         #define VF_store( str, X, sz )  \
  272.                      fwrite( X, sizeof(float), sz, str )
  273.         #define VF_recall( X, sz, str ) \
  274.                      fread(  X, sizeof(float), sz, str )
  275.     #endif
  276. #endif      /* VF_store, VF_recall in binary format */
  277.  
  278. #ifdef __cplusplus
  279. }   // end of extern "C"
  280.          // alternative syntax of convolution and deconvolution
  281.     inline void VFl_convolve( fVector Y, fVector Flt, fVector X, fVector Rsp,
  282.                               ui size, float TruncRe, float TruncIm )
  283.     {   VF_setRspEdit( fcplx( TruncRe, TruncIm ) );
  284.         VFl_convolve( Y, Flt, X, Rsp, size );
  285.     }
  286.     inline void  VFl_deconvolve( fVector Y, fVector Flt, fVector X, fVector Rsp,
  287.                                  ui size, float TruncRe, float TruncIm )
  288.     {   VF_setRspEdit( fcplx( TruncRe, TruncIm ) );
  289.         VFl_deconvolve( Y, Flt, X, Rsp, size );
  290.     }
  291.     inline void VFs_convolve( fVector Y, fVector Flt, fVector X, fVector Rsp,
  292.                               ui size, float TruncRe, float TruncIm )
  293.     {   VF_setRspEdit( fcplx( TruncRe, TruncIm ) );
  294.         VFs_convolve( Y, Flt, X, Rsp, size );
  295.     }
  296.     inline void  VFs_deconvolve( fVector Y, fVector Flt, fVector X, fVector Rsp,
  297.                                  ui size, float TruncRe, float TruncIm )
  298.     {   VF_setRspEdit( fcplx( TruncRe, TruncIm ) );
  299.         VFs_deconvolve( Y, Flt, X, Rsp, size );
  300.     }
  301. #endif   /*  __cplusplus  */
  302.  
  303. #endif   /*  __VFSTD_H  */
  304.