Текст подпрограммы и версий
qsh4r_c.zip  qsh4d_c.zip 
Тексты тестовых примеров
tqsh4r_c.zip  tqsh4d_c.zip 

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

Назначение

Вычисление определенного четырехкратного интеграла по прямоугольному параллелепипеду с заданной точностью.

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

qsh4r_c вычисляет четырехкратный интеграл по прямоугольному параллелепипеду с погрешностью

                    B
     Е ( 1 + |  ∫  f (x) dx | ) ,   по сеткам Холтона. 
                  A 

E - меpа погрешности вычисления интеграла, задаваемая пользователем.

Интеграл считается вычисленным, если разность двух приближенных значений интеграла по N точкам и по 2N точкам меньше, чем  E(1 + J), где J - значение интеграла по 2N точкам.

И.М. Соболь. Многомерные квадратурные формулы и функции Xааpа, "Hаука", M.: 1969.

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

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

Параметры

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

Версии

qsh4d_c - вычисление с удвоенной точностью определенного четырехкратного интеграла по прямоугольному параллелепипеду с заданной точностью.

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

utqs10_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы qsh4r_c.
utqs12_c - подпрограмма выдачи диагностических сообщений при работе подпрограммы qsh4d_c.

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

 

Может случиться, что пользователь задал слишком высокую точность вычислений интеграла, которая не достигается при числе точек N = 2*109. Тогда подпрограммы utqs10_c, utqs12_c выдадут диагностическое сообщение "заданная точность не может быть достигнута".

  В подпрограмме qsh4d_c параметры rint, a, b, f, e имеют тип double.

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

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

    a[0] = -1.f;
    b[0] = 2.f;
    a[1] = -1.f;
    b[1] = 2.f;
    a[2] = -1.f;
    b[2] = 2.f;
    a[3] = -1.f;
    b[3] = 2.f;
    e = .05f;
    qsh4r_c(&rint, a, b, (R_fp)f_c, &e, &ierr);

    printf("\n %16.7e \n",rint);
    rint = rint * 16.f / 81.f;
    printf("\n %16.7e \n",rint);
    printf("\n %16.7e %16.7e \n",a[0],a[1]);
    printf("\n %16.7e %16.7e \n",a[2],a[3]);
    printf("\n %16.7e %16.7e \n",b[0],b[1]);
    printf("\n %16.7e %16.7e \n",b[2],b[3]);
    printf("\n %16.7e \n",e);
    return 0;
} /* main */

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

    /* Parameter adjustments */
    --x;

    /* Function Body */
    ret_val = x[1] * x[2] * x[3] * x[4];
    return ret_val;
} /* f_c */


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