Main Page | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Globals

hist.cpp

Go to the documentation of this file.
00001 #include "StdAfx.h"
00002 
00003 //#define WANT_STREAM
00004 #define WANT_MATH
00005 
00006 #include "include.h"
00007 #include "extreal.h"
00008 #include "newran.h"
00009 
00010 #ifdef use_namespace
00011 using namespace NEWRAN;
00012 #endif
00013 
00014 #define al_trace        printf
00015 
00016 void Histogram(Random* rx, int n)          // draw histogram with n obsv
00017 {
00018    int i,j; int count[20];
00019    Real* a = new Real[n];
00020    for (i = 0; i < n; i++) a[i] = rx->Next();
00021    Real amax = a[0]; Real amin = a[0]; Real mean = a[0]; Real sd = 0;
00022    for (i = 1; i < n; i++)
00023    {
00024       if (amin > a[i]) amin = a[i]; else if (amax < a[i]) amax = a[i];
00025       mean += a[i];
00026    }
00027    mean /= n;
00028    for (i = 0; i < 20; i++) count[i]=0;
00029    for (i = 0; i < n; i++)
00030    {
00031      Real rat= (amax != amin) ? (a[i] - amin)/(amax - amin) : 1.0;
00032      j = (int)( 19.999 * rat ); count[j]++;
00033      Real diff = a[i] - mean; sd += diff*diff;
00034    }
00035    sd = sqrt(sd/(n-1));
00036    j = 0;
00037    for (i = 0; i < 20; i++) { if (j < count[i]) j = count[i]; }
00038    if (j > 70) { for (i = 0; i < 20; i++) count[i] = (int)((70L*count[i])/j); }
00039 
00040    al_trace( "\n" );
00041    for (i = 0; i < 20; i++)
00042         {
00043                 al_trace( "\n|" );
00044                 for (j = 1; j < count[i]; j = j+1) 
00045                         al_trace( "*" );
00046         }
00047 /*   al_trace( "\n%s\np. mean = %9f, p. var = %9f\ns. mean = %9f, s. var = %9f\n" , 
00048                 rx->Name() , rx->Mean() , rx->Variance() , mean , sd * sd );*/
00049 
00050    delete a;
00051 }
00052 
00053 void Hist(Random* rx, int n , const int cnt )          // draw histogram with n obsv
00054 {
00055    int i,j; int *count = new int[cnt];
00056    Real* a = new Real[n];
00057    for (i = 0; i < n; i++) a[i] = rx->Next();
00058    Real amax = a[0]; Real amin = a[0]; Real mean = a[0]; Real sd = 0;
00059    for (i = 1; i < n; i++)
00060    {
00061       if (amin > a[i]) amin = a[i]; else if (amax < a[i]) amax = a[i];
00062       mean += a[i];
00063    }
00064    mean /= n;
00065    for (i = 0; i < cnt ;  i++) count[i]=0;
00066    for (i = 0; i < n; i++)
00067    {
00068      Real rat= (amax != amin) ? (a[i] - amin)/(amax - amin) : 1.0;
00069      j = (int)( (cnt - 0.001) * rat ); count[j]++;
00070      Real diff = a[i] - mean; sd += diff*diff;
00071    }
00072    sd = sqrt(sd/(n-1));
00073    j = 0;
00074    for (i = 0; i < cnt; i++) { if (j < count[i]) j = count[i]; }
00075    if (j > 70) { for (i = 0; i < cnt; i++) if( count[i] )       count[i] = (int)((70L*count[i])/j); }
00076 
00077    al_trace( "\n" );
00078    for (i = 0; i < cnt; i++)
00079         {
00080                 al_trace( "\n%02d|" , i );
00081                 for (j = 1; j < count[i] ; j = j+1) 
00082                         al_trace( "*" );
00083         }
00084 //   al_trace( "\n%s\np. mean = %9f, p. var = %9f\ns. mean = %9f, s. var = %9f\n" , 
00085 //              rx->Name() , rx->Mean() , rx->Variance() , mean , sd * sd );
00086 
00087         delete count;
00088    delete a;
00089 }
00090 #ifdef PLATFORM_WIN32
00091 void alHistogram( Random* rx , int n , Real *a , const int ncount )          // draw histogram with n obsv
00092 {
00093    int i,j; int *count = new int[ncount];
00094 
00095    Real amax = a[0]; Real amin = a[0]; Real mean = a[0]; Real sd = 0;
00096    for (i = 1; i < n; i++)
00097    {
00098       if (amin > a[i]) amin = a[i]; else if (amax < a[i]) amax = a[i];
00099       mean += a[i];
00100    }
00101    mean /= n;
00102    for (i = 0; i < ncount; i++) count[i]=0;
00103    for (i = 0; i < n; i++)
00104    {
00105      Real rat= (amax != amin) ? (a[i] - amin)/(amax - amin) : 1.0;
00106      j = (int)( (double( ncount ) - 0.001) * rat ); count[j]++;
00107      Real diff = a[i] - mean; sd += diff*diff;
00108    }
00109    sd = sqrt(sd/(n-1));
00110 /*
00111    j = 0;
00112    for (i = 0; i < ncount; i++) { if (j < count[i]) j = count[i]; }
00113    if (j > 70) { for (i = 0; i < ncount; i++) count[i] = (int)((70L*count[i])/j); }
00114 */
00115    al_trace( "\n" );
00116    for (i = 0; i < ncount; i++)
00117         {
00118                 al_trace( "\n%04d|" , i );
00119                 for (j = 1; j < count[i]; j = j+1) 
00120                         al_trace( "*" );
00121         }
00122    al_trace( "\n%s\np. mean = %9f, p. var = %9f\ns. mean = %9f, s. var = %9f\n" , 
00123                 rx->Name() , rx->Mean() , rx->Variance() , mean , sd * sd );
00124 
00125         delete [] count;
00126 }
00127 #endif

Generated on Fri Dec 5 04:05:59 2003 for Borqueror by doxygen 1.3.3