Main Page   Namespace List   Class Hierarchy   Compound List   File List   Namespace Members   Compound Members   File Members  

mmath.cc

Go to the documentation of this file.
00001 
00002 #include <stdlib.h>
00003 #include "magic/mmath.h"
00004 #include "magic/mcoord.h"
00005 #include "magic/mmagisupp.h"
00006 
00007 #ifndef RAND_MAX
00008 #define RAND_MAX 32767
00009 #endif
00010 
00011 BEGIN_NAMESPACE (MagiC);
00012 
00013 double sum (const Vector& x) {
00014     double res = 0.0;
00015     for (int i=0; i<x.size(); i++)
00016         res += x[i];
00017     return res;
00018 }
00019 
00020 double min (const Vector& x) {
00021     double min = UNDEFINED_FLOAT;
00022     for (int i=0; i<x.size(); i++)
00023         if (!is_undef(x[i]) && x[i]<min)
00024             min = x[i];
00025     return min;
00026 }
00027 
00028 int minIndex (const Vector& x) {
00029     double min = UNDEFINED_FLOAT;
00030     int minI=0;
00031     for (int i=0; i<x.size(); i++)
00032         if (!is_undef(x[i]) && x[i]<min) {
00033             min = x[i];
00034             minI = i;
00035         }
00036     return minI;
00037 }
00038 
00039 double max (const Vector& x) {
00040     double max = -UNDEFINED_FLOAT;
00041     for (int i=0; i<x.size(); i++)
00042         if (!is_undef(x[i]) && x[i]>max)
00043             max = x[i];
00044     return max;
00045 }
00046 
00047 int maxIndex (const Vector& x) {
00048     double max = -UNDEFINED_FLOAT;
00049     int maxI=0;
00050     for (int i=0; i<x.size(); i++)
00051         if (!is_undef(x[i]) && x[i]>max) {
00052             max = x[i];
00053             maxI = i;
00054         }
00055     return maxI;
00056 }
00057 
00058 double avg (const Vector& x) {
00059     return sum (x) / x.size();
00060 }
00061 
00062 double stddev (const Vector& x) {
00063     double average = avg (x);
00064     double res = 0.0;
00065     for (int i=0; i<x.size(); i++)
00066         res += sqr (x[i]-average);
00067     return sqrt (res/(x.size()+1));
00068 }
00069 
00070 double stdmerr (const Vector& x) {
00071     return stddev(x)/sqrt(double(x.size()));
00072 }
00073 
00074 Vector histogram (const Vector& x, int n) {
00075     Vector result;
00076     
00077     // Init histogram
00078     result.make (n);
00079     for (int i=0; i<result.size(); i++)
00080         result[i] = 0.0;
00081 
00082     // Find minima and maxima
00083     double mi=min(x), ma=max(x);
00084     double mul = double(n-1)/(ma-mi);
00085 
00086     // Make histogram
00087     int pos=0;
00088     for (int i=0; i<x.size(); i++) {
00089         pos = int(mul*(x[i]-mi));
00090         result[pos] = result[pos] + 1.0;
00091     }
00092 
00093     /*
00094     // Calculate means
00095     int meanrange=2;
00096     Vector result2 (n);
00097     for (int i=0; i<result.size(); i++) {
00098         int values=0;
00099         double sum = 0.0;
00100         for (int m=-meanrange; m<=meanrange; m++)
00101             if (i+m>=0 && i+m<result.size()) {
00102                 sum += result[i+m];
00103                 values++;
00104             }
00105         result2[i] = sum/double(values);
00106     }
00107     */
00108 
00109     return result;
00110 }
00111 
00112 void add (Vector& x, double a) {
00113     for (int i=0; i<x.size(); i++)
00114         x[i] += a;
00115 }
00116 
00117 void multiply (Vector& x, double m) {
00118     for (int i=0; i<x.size(); i++)
00119         x[i] *= m;
00120 }
00121 
00122 void multiplyToUnity (Vector& x) {
00123     double xsum = sum (x);
00124     if (xsum==0)
00125         add (x, 1.0/x.size());
00126     else
00127         multiply (x, 1/xsum);
00128 }
00129 
00130 
00132 //                                                                          //
00133 //                    ___                    |  __  ___                     //
00134 //                   /   \                   | /  \ |  \                    //
00135 //                   |      __   __  |/\  ---|   _/ |   |                   //
00136 //                   |     /  \ /  \ |   (   |  /   |   |                   //
00137 //                   \___/ \__/ \__/ |    ---| /___ |__/                    //
00138 //                                                                          //
00140 
00141 void Coord2D::copy (const Coord3D& o) {
00142     x=o.x;
00143     y=o.y;
00144 }
00145 
00146 /*
00147 double quadatan (double y, double x) {
00148     double at=atan (y/x);
00149     
00150     // Tuodaan oikeaan kvadranttiin
00151     if (x<0 && y>0) at+=M_PI;
00152     if (x<0 && y<0) at+=M_PI;
00153     if (x>0 && y<0) at+=2*M_PI;
00154     
00155     return at;
00156 }
00157 */
00158 
00159 END_NAMESPACE;
00160 
00161 

Generated on Thu Feb 10 20:06:42 2005 for LibMagiC by doxygen1.2.18