source: sasview/src/sans/models/c_extension/cephes/chdtr.c @ 29b6cbd

ESS_GUIESS_GUI_DocsESS_GUI_batch_fittingESS_GUI_bumps_abstractionESS_GUI_iss1116ESS_GUI_iss879ESS_GUI_iss959ESS_GUI_openclESS_GUI_orderingESS_GUI_sync_sascalccostrafo411magnetic_scattrelease-4.1.1release-4.1.2release-4.2.2release_4.0.1ticket-1009ticket-1094-headlessticket-1242-2d-resolutionticket-1243ticket-1249ticket885unittest-saveload
Last change on this file since 29b6cbd was 230f479, checked in by Mathieu Doucet <doucetm@…>, 11 years ago

Rename C source dir for models (minor updates)

  • Property mode set to 100644
File size: 3.4 KB
Line 
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/*
146Cephes Math Library Release 2.8:  June, 2000
147Copyright 1984, 1987, 2000 by Stephen L. Moshier
148*/
149
150#include "mconf.h"
151#ifdef ANSIPROT
152extern double igamc ( double, double );
153extern double igam ( double, double );
154extern double igami ( double, double );
155#else
156double igamc(), igam(), igami();
157#endif
158
159double chdtrc(df,x)
160double df, x;
161{
162
163if( (x < 0.0) || (df < 1.0) )
164        {
165        mtherr( "chdtrc", DOMAIN );
166        return(0.0);
167        }
168return( igamc( df/2.0, x/2.0 ) );
169}
170
171
172
173double chdtr(df,x)
174double df, x;
175{
176
177if( (x < 0.0) || (df < 1.0) )
178        {
179        mtherr( "chdtr", DOMAIN );
180        return(0.0);
181        }
182return( igam( df/2.0, x/2.0 ) );
183}
184
185
186
187double chdtri( df, y )
188double df, y;
189{
190double x;
191
192if( (y < 0.0) || (y > 1.0) || (df < 1.0) )
193        {
194        mtherr( "chdtri", DOMAIN );
195        return(0.0);
196        }
197
198x = igami( 0.5 * df, y );
199return( 2.0 * x );
200}
Note: See TracBrowser for help on using the repository browser.