/****************************************************/ /* Распределение Стьюдента */ /****************************************************/ #include #include #include "betaDF.h" ENTRY double studentDF(double n, double x) /* * Вычисляется вероятность того, что случайная величина, * подчиняющаяся распределению Стьюдента (T-распределению) * c n степенями свободы, не превосходит (меньше или равна) x. * Используется известная связь t- и бета-распределений. */ { 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; }