#include <pdf.h>
Public Methods | |
pdf () | |
~pdf () | |
double | pdf_stddev (const double *v, const size_t N) |
Private Methods | |
pdf (const pdf &rhs) | |
void | normalize (double *norm, const double *v, const size_t N) |
This is a discrete version of the Probability Density Function (PDF), which for continuous functions can be expressed in non-discrete form. Of course many of the things that we measure cannot be expressed as continuous functions.
The PDF is a histogram, where each histogram bin represents the probability of the data being in the range over which the bin is calculated. The sum of all the bins will be 1.
The PDF is constructed so that it has a zero mean. 64 bins are used in calculating he histogram, so there should be sufficiently more than 64 items.
Definition at line 26 of file pdf.h.
|
|
|
Definition at line 33 of file pdf.h. 00033 {}; |
|
Definition at line 34 of file pdf.h. 00034 {} |
|
Definition at line 6 of file pdf.cpp. Referenced by pdf_stddev().
00007 { 00008 double sum = 0; 00009 size_t i; 00010 for (i = 0; i < N; i++) { 00011 sum = sum + v[i]; 00012 } 00013 double mean = 0; 00014 if (sum != 0) { 00015 double mean = sum / N; 00016 } 00017 for (i = 0; i < N; i++) 00018 norm[i] = v[i] - mean; 00019 } // normalize |
|
Definition at line 23 of file pdf.cpp. 00024 { 00025 double pdf_sigma = 0.0; 00026 if (v != 0 && N != 0) { 00027 // On average, 4 elements per bin 00028 // const size_t num_bins = N >> 2; 00029 const size_t num_bins = 64; 00030 histogram::bin_vec binz( num_bins ); 00031 histogram histo; 00032 00033 histo.calculate( v, N, binz ); 00034 double *freq = new double[ num_bins ]; 00035 00036 // calculate the PDF from the integer frequency counts 00037 for (size_t i = 0; i < num_bins; i++) { 00038 freq[i] = 0.0; 00039 size_t count = static_cast<size_t>( binz[i] ); 00040 double val = 0.0; 00041 if (count > 0) { 00042 freq[i] = static_cast<double>(count)/static_cast<double>(N); 00043 val = freq[i]; 00044 } 00045 // printf("%2d %9.6f\n", i, val ); 00046 } 00047 // printf("\n\n"); 00048 00049 double *norm = new double[ num_bins ]; 00050 00051 normalize(norm, freq, num_bins); 00052 00053 stddev sd; 00054 pdf_sigma = sd.sd( norm, num_bins ); 00055 00056 delete [] norm; 00057 delete [] freq; 00058 } 00059 return pdf_sigma; 00060 } // pdf |