1 // This is core/vnl/algo/vnl_chi_squared.h
2 #ifndef vnl_chi_squared_h_
3 #define vnl_chi_squared_h_
4 #include "vnl/vnl_export.h"
5 #include <vnl/algo/vnl_algo_export.h>
6 //:
7 // \file
8 // \brief Name space for various (mostly templated) chi-squared distribution functions.
9 // \author Rupert Curwen, GE CRD
10 // \date   August 18th, 1998
11 //
12 // \verbatim
13 //  Modifications
14 //   26/03/2001   dac (Manchester) tidied up documentation
15 //   24 Mar 2010  Peter Vanroose   made vnl_chi_squared_cumulative() templated
16 // \endverbatim
17 
18 //: Compute cumulative distribution function value for chi-squared distribution.
19 // This subroutine computes the cumulative distribution function
20 // value for the chi-squared distribution with integer degrees of
21 // freedom parameter = dof.  This distribution is defined for all
22 // non-negative chisq.  Thus if a random variable x is drawn from a
23 // chi-squared distribution with d degrees of freedom, then
24 //  $P(x < X) =$ vnl_chi_squared_cumulative(X,d).
25 // Internally, T=double is used.
26 template <class T>
27 double vnl_chi_squared_cumulative(T chisq, long dof);
28 
29 //------------------------------------------------------------
30 
31 //: Name space for various chi-squared distribution functions.
32 //
33 //  A[] and B[] are (pointers to) arrays containing histograms.
34 //  If the 'normalize' parameter is true, each histogram will
35 //  be implicitly normalized (so as to sum to 1) before the
36 //  statistic is calculated :
37 //
38 //  $a[i] = A[i] / \sum_j A[j]$
39 //
40 //  $b[i] = B[i] / \sum_j B[j]$
41 //
42 //  *DO NOT* add scale factors to these functions or you will break
43 //  the code written by those who read the documentation. fsm.
44 //
45 // $\displaystyle   \sum_i \frac{ (a[i] - b[i])^2 }{ a[i] } $
46 //
47 
48 template <class T>
49 double vnl_chi_squared_statistic_1 (T const *A, T const *B,
50                                     int n, bool normalize);
51 
52 //:
53 // $\displaystyle   \sum_i \frac{ (a[i] - b[i])^2 }{ b[i] } $
54 template <class T>
55 double vnl_chi_squared_statistic_2 (T const *A, T const *B,
56                                     int n, bool normalize);
57 
58 //:
59 // $\displaystyle   \sum_i \frac{ (a[i] - b[i])^2 }{ a[i] + b[i] } $
60 template <class T>
61 double vnl_chi_squared_statistic_12(T const *A, T const *B,
62                                     int n, bool normalize);
63 
64 #define VNL_CHI_SQUARED_INSTANTIATE(T) \
65 extern "please include vnl/algo/vnl_chi_squared.hxx first"
66 
67 #endif // vnl_chi_squared_h_
68