Текст подпрограммы и версий sf86r_c.zip |
Тексты тестовых примеров tsf86r_c.zip |
Вычисление функции распределения вероятностей Эрланга (распределения Пирсона 3 - го типа).
Подпрограмма sf86r_c вычисляет функцию распределения Эрланга (распределения Пирсона 3 - го типа) для i - го интервала группировки [xi - 1, xi] ( i = 1, 2, ..., N) при заданном x0 = x0 по формуле
x i x i-1 P = ∫ f(x) dx - ∫ f(x) dx , 0 0 где f(x) = [ (x - x0)k - 1 / (k - 1)! ] (k/m)k e - k/m (x - x0) ; m - среднее значение распределения Эрланга; k = (m - x0) 2 / vars; x0 - нижняя граница первого интервала группировки; vars - дисперсия распределения Эрланга; N - количество интервалов группировки; xi = xi ; xi-1 = xi-1
Абрамовиц М., Стиган И. Справочник по специальным функциям. М.: Наука, 1979.
int sf86r_c (real *rm, real *vars, integer *n, real *x, real *x0, real *p)
Параметры
rm - | заданное среднее значение m распределения Эрланга (тип: вещественный); |
vars - | заданная дисперсия vars распределения Эрланга (тип: вещественный); |
n - | заданное количество интервалов группировки (тип: целый); |
x - | вещественный одномерный массив длины n, содержащий заданные границы xi интервалов группировки, i = 1, 2, ..., n; |
x0 - | заданная нижняя граница первого интервала группировки (тип: вещественный); |
p - |
вещественный одномерный массив длины n + 1, содержащий вычисленные значения
pi (i = 1, 2, ..., n) функции
распределения вероятностей Эрланга для i - го интервала группировки, причем
n p(n+1) = 1 - ∑ pi . i=1 |
Версии: нет
Вызываемые подпрограммы: нет
Замечания по использованию: нет
int main(void) { /* Initialized data */ static float x[10] = { .05f,.15f,.25f,.35f,.45f,.55f,.65f,.75f,.85f,.95f }; /* Local variables */ extern int sf86r_c(float *, float *, int *, float *, float *, float *); static float vars__; static int n, i__; static float p[11], x0, rm; rm = 2.f; vars__ = 1.f; n = 10; x0 = 0.f; sf86r_c(&rm, &vars__, &n, x, &x0, p); for (i__ = 0; i__ <= 4; i__ += 4) { printf("\n %16.7e %16.7e %16.7e %16.7e \n", p[i__], p[i__+1], p[i__+2], p[i__+3]); } printf("\n %16.7e %16.7e %16.7e \n", p[8], p[9], p[10]); return 0; } /* main */ Результаты: p = ( 0.3841996e-5, 0.2620249e-3, 0.1485732e-2, 0.4001807e-2, 0.7705259e-2, 0.1228324e-1, 0.1735353e-1, 0.2254702e-1, 0.2754702e-1, 0.3210832e-1, 0.8747022 )