Файл studentDF.h /****************************************************/ /* Распределение Стьюдента */ /****************************************************/ #ifndef __STUDENT_H__
#define ENTRY extern #define LOCAL static
ENTRY double studentDF(double n, double x); //Вычисляется вероятность того, что случайная величина, // подчиняющаяся распределению Стьюдента (T-распределению) // c n степенями свободы, не превосходит (меньше или равна) x.
ENTRY double inv_studentDF(double n, double p); // По данной вероятности p вычисляется значение q, // для которого studentDF(n,q) вернет p.
#define __STUDENT_H__ /* Prevents redefinition */ #endif /* Ends #ifndef __STUDENT_H__ */
Файл studentDF.cpp /****************************************************/ /* Распределение Стьюдента */ /****************************************************/
#include <assert.h> #include <math.h>
#include "betaDF.h"
ENTRY double studentDF(double n, double x) /* * Вычисляется вероятность того, что случайная величина, * подчиняющаяся распределению Стьюдента (T-распределению) * c n степенями свободы, не превосходит (меньше или равна) x. */ { assert(n > 0);
if (x == 0.0) return 0.5; BetaDF b=BetaDF(0.5 * n, 0.5); double z = 0.5 * b.value(n / (n + x * x)); return (x > 0.0) ? 1.0 - z : z; }/*studentDF*/
ENTRY double inv_studentDF(double n, double p) /* * По данной вероятности p вычисляется значение q, * для которого studentDF(n,q) вернет p. */ { if (p == 0.5) return 0.0; double z = 1.0 - 2.0 * p; BetaDF b=BetaDF(0.5, 0.5*n); z = b.quantile(fabs(z)); double q = sqrt(n*z/(1.0-z)); return (p < 0.5) ? -q : q; }
1 2
8 8 8
| |