** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: mathfuncs.cpp,v 1.1 2000/06/22 10:17:28 kevin Exp $
+** $Id: mathfuncs.cpp,v 1.3 2000/12/20 20:08:48 kevin Exp $
**
** This program is free software; you can redistribute it and/or modify
** it under the terms of the GNU General Public License (version 2) as
/* NAME
- * norm_angle Normalize angle to 0 to 2 * PI range
+ * normalizeAngle Normalize angle to 0 to 2 * PI range
*
* SYNOPSIS
- * t = norm_angle (theta)
+ * t = normalizeAngle (theta)
* double t Normalized angle
* double theta Input angle
*/
return (theta);
}
+\r
+\r
+void \r
+vectorNumericStatistics (std::vector<double> vec, double& min, double& max, double& mean, double& mode, double& median, double& stddev)\r
+{\r
+ int n = vec.size();\r
+ if (n <= 0)\r
+ return;\r
+\r
+ mean = 0;\r
+ min = vec[0];\r
+ max = vec[0];\r
+ int i;\r
+ for (i = 0; i < n; i++) {\r
+ double v = vec[i];\r
+ if (v > max)\r
+ max = v;\r
+ if (v < min)\r
+ min = v;\r
+ mean += v;\r
+ }\r
+ mean /= n;\r
+ \r
+ static const int nbin = 1024;\r
+ int hist[ nbin ] = {0};\r
+ double spread = max - min;\r
+ mode = 0;\r
+ stddev = 0;\r
+ for (i = 0; i < n; i++) {\r
+ double v = vec[i];\r
+ int b = static_cast<int>((((v - min) / spread) * (nbin - 1)) + 0.5);\r
+ hist[b]++;\r
+ double diff = (v - mean);\r
+ stddev += diff * diff;\r
+ }\r
+ stddev = sqrt (stddev / n);\r
+ \r
+ int max_binindex = 0;\r
+ int max_bin = -1;\r
+ for (int ibin = 0; ibin < nbin; ibin++) {\r
+ if (hist[ibin] > max_bin) {\r
+ max_bin = hist[ibin];\r
+ max_binindex = ibin;\r
+ }\r
+ }\r
+ \r
+ mode = (max_binindex * spread / (nbin - 1)) + min;\r
+ \r
+ std::sort(vec.begin(), vec.end());\r
+ \r
+ if (n % 2) // Odd\r
+ median = vec[((n - 1) / 2)];\r
+ else // Even\r
+ median = (vec[ (n / 2) - 1 ] + vec[ n / 2 ]) / 2;\r
+}\r