Текст подпрограммы и версий
sf86r_c.zip 
Тексты тестовых примеров
tsf86r_c.zip 

Подпрограмма:  sf86r_c

Назначение

Вычисление функции распределения вероятностей Эрланга (распределения Пирсона 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   )