#include #include #include "betaDF.h" ENTRY double FDF(double n1, double n2, double x) // Вычисляется вероятность того, что случайная величина, // подчиняющаяся центральному F-распределению с параметрами n1 и n2, // не превосходит заданного значения x. { assert(x >= 0.0); return 1.0 - BetaDF(0.5 * n2, 0.5 * n1).value(n2 / (n2 + n1 * x)); }/*FDF*/ ENTRY double inv_FDF(double n1, double n2, double p) // Ищет точку, в которой функция F-распределения // с параметрами n1 и n2 равняется p { double y=BetaDF(0.5 * n1, 0.5 * n2).inv(p); return n2*y/n1/(1-y); }/*inv_FDF*/ #ifdef TEST_IT #include LOCAL void tryF(void) { double m, n, x, p; double alpha=0.95; while (1) { printf("\n\n\rEnter integer n1: "); scanf("%lg", &n); if (n <= 0) break; printf("\rEnter integer n2: "); scanf("%lg", &m); printf("\rEnter F: "); scanf("%lg", &p); x = FDF(n, m, p); printf("\nF(%.0lf, %.0lf, %lg) = %lg", n, m, p, x); } }/*tryF*/ LOCAL void try_invF(void) { double n1, n2, bound; double alpha=0.95; while (1) { printf("\n\n\rEnter integer n1: "); scanf("%lg", &n1); if (n1 <= 0) break; printf("\rEnter integer n2: "); scanf("%lg", &n2); bound = inv_FDF(n1,n2,alpha); printf("\n%.2f bound = %lg", alpha, bound); } }/*try_invF*/ void main(void) { tryF(); try_invF(); } #endif /* Ends #ifdef TEST_IT */