Текст подпрограммы и версий
qsk2r_c.zip  qsk2d_c.zip 
Тексты тестовых примеров
tqsk2r_c.zip  tqsk2d_c.zip 

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

Назначение

Вычисление определенного интеграла по обобщенной квадратурной формуле Ньютона - Котеса, точной для многочленов девятой степени.

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

 Подпрограмма qsk2r_c вычисляет интеграл
            B
           ∫ f (x) dx 
          A 

по обобщенной формуле Ньютона - Котеса с автоматическим выбором шага.

G.E.Forsythe, M.A.Malkolm, C.B.Moler. Computer Methods for Mathematical Computations. 1977 by Prentice - hall, INC.

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

    int qsk2r_c (R_fp fun, real *a, real *b, real *abserr,
            real *relerr, real *result, real *errest, integer *nofun,
            real *flag)

Параметры

fun - имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию  f (x);
a, b - заданные нижний и верхний пределы интегрирования (тип: вещественный);
abserr - заданная абсолютная погрешность вычисления интеграла (тип: вещественный);
relerr - заданная относительная погрешность вычисления интеграла (тип: вещественный);
result - вещественная переменная, содержащая вычисленное значение интеграла;
errest - вещественная переменная, содержащая оценку погрешности вычисленного значения интеграла;
nofun - целая переменная, содержащая число вычисленных значений подинтегральной функции, потребовавшихся для получения результата;
flag - вещественная переменная, служащая для хаpактеристики надежности вычисленного результата; при этом:
если flag = 0., то полученный результат с большой вероятностью удовлетворяет заданной погрешности;
если flag = xxx.yyy, то xxx - число интервалов, на которых не удалось достигнуть заданной точности, а 0.yyy = (b - x0)/(b - a), где x0 - граница отрезка [a, x0], на котоpом был израсходован лимит обращений к подпрограмме - функции.

Версии

qsk2d_c - вычисление определенного интеграла по обобщенной формуле Ньютона - Котеса, точной для многочленов девятой степени от функции, заданной с удвоенной точностью.

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

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

  B подпрограмме qsk2d_c параметры fun, a, b, abserr, relerr, result, errest, flag имеют тип double.

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

int main(void)
{
    /* Local variables */
    static float flag__, a, b;
    extern int qsk2r_c(R_fp, float *, float *, float *, float *,
                       float *, float *, int *, float *);
    static int nofun;
    static float abserr, relerr, errest, result;
    extern float fun_c();

    a = 0.f;
    b = 2.f;
    relerr = 1e-10f;
    abserr = 0.f;
    qsk2r_c((R_fp)fun_c, &a, &b, &abserr, &relerr, &result, &errest, &nofun,
            &flag__);

    printf("\n result = %16.7e errest = %16.7e \n",result,errest);
    if (flag__ != 0.f) {
        printf("\n flag = %16.7e \n",flag__);
    }
    printf("\n %10i \n",nofun);
    return 0;
} /* main */

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

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

    if (*x == 0.f) {
        ret_val = 1.f;
    }
    if (*x != 0.f) {
        ret_val = (float)sin(*x) / *x;
    }
    return ret_val;
} /* fun_c */


Результаты:

      result  =  1.6054

      errest  =  0.
      nofun   =  33
      flag__  =  0.