00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 #ifndef SCPPNT_STATFUNC_H
00023 #define SCPPNT_STATFUNC_H
00024 
00025 #ifdef SCPPNT_NO_DIR_PREFIX
00026 #include "scppnt.h"
00027 #else
00028 #include "scppnt/scppnt.h"
00029 #endif
00030 
00031 namespace SCPPNT
00032 {
00033 
00034 
00035 
00036 
00037 
00038 
00039   template<class T> class Standardize
00040   {
00041 
00042 public:
00043 
00044 
00045 
00046 
00047     Standardize(T s = 1)
00048     {
00049       sum = s;
00050     }
00051 
00052 
00053 
00054 
00055 
00056 
00057 
00058 
00059 
00060     template<class I> void operator()(Subscript nelem, I begin)
00061     {
00062       int i;
00063       T oldsum = 0;
00064 
00065       I ib = begin;
00066       for (i = nelem; i--; ++ib)
00067       {
00068         oldsum += *ib;
00069       }
00070 
00071       oldsum *= sum;
00072       for (i = nelem; i--; ++begin)
00073       {
00074         *begin /= oldsum;
00075       }
00076     }
00077 
00078 private:
00079 
00080     T sum; 
00081   };
00082 
00083 
00084 
00085 
00086 
00087 
00088   template<class T> class Sum
00089   {
00090 
00091 public:
00092 
00093 
00094 
00095 
00096 
00097 
00098 
00099 
00100 
00101     template<class I> T operator()(Subscript nelem, I begin)
00102     {
00103       T sum = 0;
00104 
00105       while (nelem--)
00106       {
00107         sum += *begin;
00108         ++begin;
00109       }
00110 
00111       return sum;
00112     }
00113 
00114   };
00115 
00116 
00117 
00118 
00119 
00120 
00121   template<class T> class Mean
00122   {
00123 
00124 public:
00125 
00126 
00127 
00128 
00129 
00130 
00131 
00132 
00133 
00134     template<class I> T operator()(Subscript nelem, I begin)
00135     {
00136       T n = nelem;
00137       T sum = 0;
00138 
00139       while (nelem--)
00140       {
00141         sum += *begin;
00142         ++begin;
00143       }
00144 
00145       return sum / n;
00146     }
00147 
00148   };
00149 
00150   
00151 
00152 
00153 
00154 
00155 
00156 
00157 
00158 
00159   template<class T> class Moment
00160   {
00161 
00162 public:
00163 
00164 
00165 
00166 
00167 
00168 
00169     Moment(int o, T m = 0, bool m1 = false)
00170     {
00171       order = o;
00172       mean = m;
00173       nm1 = m1;
00174     }
00175 
00176 
00177 
00178 
00179 
00180 
00181 
00182 
00183 
00184     template<class I> T operator()(Subscript nelem, I begin)
00185     {
00186       int n = (nm1) ? (nelem-1) : nelem;
00187       T sum = 0;
00188 
00189       while (nelem--)
00190       {
00191         T dev = *begin - mean;
00192         T dev2 = dev;
00193         for (int i = order-1; i--;)
00194           dev *= dev2;
00195         sum += dev;
00196         ++begin;
00197       }
00198 
00199       return sum / n;
00200     }
00201 
00202 private:
00203 
00204     int order; 
00205     T mean; 
00206     bool nm1; 
00207 
00208   };
00209 
00210 } 
00211 
00212 #endif // SCPPNT_STATFUNC_H