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

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

Назначение

Вычисление определенного интеграла по квадратурной формуле Pомберга с заданной абсолютной погрешностью.

Математическое описание

 qsr2r_c вычисляет интеграл
            b
           ∫ f (x) dx 
          a 

по квадратурной формуле Pомберга с заданной абсолютной погрешностью.

Бахвалов H.C. "Численные методы", т.1, "Hаука", 1973.

Использование

    int qsr2r_c (real *rint, real *a, real *b, R_fp f, real *e,
            integer *ierr)

Параметры

rint - вещественная переменная, содержащая вычисленное значение интеграла;
a, b - заданные нижний и верхний пределы интегрирования (тип: вещественный);
f - имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию  f (x);
e - заданная абсолютная погрешность вычисления интеграла (тип: вещественный);
ierr - целая переменная, указывающая причину окончания вычислений; если интеграл сосчитан, то ierr = 0, в противном случае ierr = 65.

Версии: нет

Вызываемые подпрограммы

utqs11_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы qsr2r_c.

Замечания по использованию

  Если интеграл не может быть вычислен с точностью e, выдается диагностическое сообщение "заданная точность не может быть достигнута".

Пример использования

int main(void)
{
    /* Local variables */
    static int ierr;
    static float rint, a, b, e;
    extern float f_c();
    extern int qsr2r_c(float *, float *, float *, R_fp, float *, int *);

    a = 0.f;
    b = 1.f;
    e = 1e-10f;
    qsr2r_c(&rint, &a, &b, (R_fp)f_c, &e, &ierr);

    printf("\n %16.7e %5i \n",rint,ierr);
    return 0;
} /* main */

float f_c(float *x)
{
    /* System generated locals */
    float ret_val;

    /* Builtin functions */
    double exp(double);

    if (*x <= 0.f) {
        goto l1;
    } else {
        goto l2;
    }
l1:
    ret_val = 1.f;
    goto l3;
l2:
    ret_val = *x / ((float)exp(*x) - 1.f);
l3:
    return ret_val;
} /* f_c */


Результаты:   rint  =  0.77750463411 ,   ierr  =  0