1 /*							chdtr.c
2  *
3  *	Chi-square distribution
4  *
5  *
6  *
7  * SYNOPSIS:
8  *
9  * double df, x, y, chdtr();
10  *
11  * y = chdtr( df, x );
12  *
13  *
14  *
15  * DESCRIPTION:
16  *
17  * Returns the area under the left hand tail (from 0 to x)
18  * of the Chi square probability density function with
19  * v degrees of freedom.
20  *
21  *
22  *                                  inf.
23  *                                    -
24  *                        1          | |  v/2-1  -t/2
25  *  P( x | v )   =   -----------     |   t      e     dt
26  *                    v/2  -       | |
27  *                   2    | (v/2)   -
28  *                                   x
29  *
30  * where x is the Chi-square variable.
31  *
32  * The incomplete gamma integral is used, according to the
33  * formula
34  *
35  *	y = chdtr( v, x ) = igam( v/2.0, x/2.0 ).
36  *
37  *
38  * The arguments must both be positive.
39  *
40  *
41  *
42  * ACCURACY:
43  *
44  * See igam().
45  *
46  * ERROR MESSAGES:
47  *
48  *   message         condition      value returned
49  * chdtr domain   x < 0 or v < 1        0.0
50  */
51 /*							chdtrc()
52  *
53  *	Complemented Chi-square distribution
54  *
55  *
56  *
57  * SYNOPSIS:
58  *
59  * double v, x, y, chdtrc();
60  *
61  * y = chdtrc( v, x );
62  *
63  *
64  *
65  * DESCRIPTION:
66  *
67  * Returns the area under the right hand tail (from x to
68  * infinity) of the Chi square probability density function
69  * with v degrees of freedom:
70  *
71  *
72  *                                  inf.
73  *                                    -
74  *                        1          | |  v/2-1  -t/2
75  *  P( x | v )   =   -----------     |   t      e     dt
76  *                    v/2  -       | |
77  *                   2    | (v/2)   -
78  *                                   x
79  *
80  * where x is the Chi-square variable.
81  *
82  * The incomplete gamma integral is used, according to the
83  * formula
84  *
85  *	y = chdtr( v, x ) = igamc( v/2.0, x/2.0 ).
86  *
87  *
88  * The arguments must both be positive.
89  *
90  *
91  *
92  * ACCURACY:
93  *
94  * See igamc().
95  *
96  * ERROR MESSAGES:
97  *
98  *   message         condition      value returned
99  * chdtrc domain  x < 0 or v < 1        0.0
100  */
101 /*							chdtri()
102  *
103  *	Inverse of complemented Chi-square distribution
104  *
105  *
106  *
107  * SYNOPSIS:
108  *
109  * double df, x, y, chdtri();
110  *
111  * x = chdtri( df, y );
112  *
113  *
114  *
115  *
116  * DESCRIPTION:
117  *
118  * Finds the Chi-square argument x such that the integral
119  * from x to infinity of the Chi-square density is equal
120  * to the given cumulative probability y.
121  *
122  * This is accomplished using the inverse gamma integral
123  * function and the relation
124  *
125  *    x/2 = igami( df/2, y );
126  *
127  *
128  *
129  *
130  * ACCURACY:
131  *
132  * See igami.c.
133  *
134  * ERROR MESSAGES:
135  *
136  *   message         condition      value returned
137  * chdtri domain   y < 0 or y > 1        0.0
138  *                     v < 1
139  *
140  */
141 
142 /*								chdtr() */
143 
144 
145 /*
146 Cephes Math Library Release 2.0:  April, 1987
147 Copyright 1984, 1987 by Stephen L. Moshier
148 Direct inquiries to 30 Frost Street, Cambridge, MA 02140
149 */
150 
151 #include "mconf.h"
152 #include "cephes.h"
153 
chdtrc(df,x)154 double chdtrc(df,x)
155 double df, x;
156 {
157 
158 if( (x < 0.0) || (df < 1.0) )
159 	{
160 	mtherr( "chdtrc", DOMAIN );
161 	return(0.0);
162 	}
163 return( igamc( df/2.0, x/2.0 ) );
164 }
165 
166 
167 
chdtr(df,x)168 double chdtr(df,x)
169 double df, x;
170 {
171 
172 if( (x < 0.0) || (df < 1.0) )
173 	{
174 	mtherr( "chdtr", DOMAIN );
175 	return(0.0);
176 	}
177 return( igam( df/2.0, x/2.0 ) );
178 }
179 
180 
181 
chdtri(df,y)182 double chdtri( df, y )
183 double df, y;
184 {
185 double x;
186 
187 if( (y < 0.0) || (y > 1.0) || (df < 1.0) )
188 	{
189 	mtherr( "chdtri", DOMAIN );
190 	return(0.0);
191 	}
192 
193 x = igami( 0.5 * df, y );
194 return( 2.0 * x );
195 }
196