Текст подпрограммы и версий
qtt9r_c.zip  qtt9d_c.zip 
Тексты тестовых примеров
tqtt9r_c.zip  tqtt9d_c.zip 

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

Назначение

Вычисление определенного трехкратного интеграла от табличной функции, заданной на неравномерной сетке, по формуле трапеций.

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

По формуле трапеций вычисляeтcя значение определенного тройного интеграла от табличной функции f (x, y, z), заданной на неравномерной сетке (xi, yj, zk),   i = 1, ..., N,   j = 1, ..., M,   k = 1, ..., L .

Н.С.Бахвалов. Численные методы, "Hаука", M., 1975.

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

    int qtt9r_c (real *rint, real *x1, real *x2, real *x3, real *f,
             integer *n, integer *m, integer *l)

Параметры

rint - вещественная переменная, содержащая вычисленное значение интеграла;
x1 - вещественный вектоp длины n, содержащий узлы неравномерной сетки по x;
x2 - вещественный вектоp длины m, содержащий узлы неравномерной сетки по y;
x3 - вещественный вектоp длины l, содержащий узлы неравномерной сетки по z;
f - вещественный трехмерный массив размера n на m на l, содержащий значения функции f (x, y, z);
n - заданное число узлов сетки по x (тип: целый);
m - заданное число узлов сетки по y (тип: целый);
l - заданное число узлов сетки по z (тип: целый).

Версии

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

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

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

 

Требуется, чтобы   xi > xi - 1,   i = 2, ..., n,   yj > yj - 1,   j = 2, ..., m,   zk > zk - 1,   k = 2, ..., l;   n ≥ 2,   m ≥ 2,   l ≥ 2.

В подпрограмме qtt9d_c параметры rint, x1, x2, x3, f имеют тип double.

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

int main(void)
{
    /* Local variables */
    static float rint, f[1331]   /* was [11][11][11] */;
    static int i__, j, k, l, m, n;
    extern int qtt9r_c(float *, float *, float *, float *, float *,
                       int *, int *, int *);
    static float h1, h2, h3, x1[11], x2[11], x3[11];
    int i__1, i__2, i__3;

#define f_ref(a_1,a_2,a_3) f[((a_3)*11 + (a_2))*11 + a_1 - 133]

    h1 = .1f;
    h2 = .1f;
    h3 = .1f;
    n = 11;
    m = 11;
    l = 11;
    x1[0] = 0.f;
    x2[0] = 0.f;
    x3[0] = 0.f;
    i__1 = n;
    for (i__ = 2; i__ <= i__1; ++i__) {
/* l1: */
        x1[i__ - 1] = x1[i__ - 2] + h1;
    }
    i__1 = m;
    for (j = 2; j <= i__1; ++j) {
/* l2: */
        x2[j - 1] = x2[j - 2] + h2;
    }
    i__1 = l;
    for (k = 2; k <= i__1; ++k) {
/* l3: */
        x3[k - 1] = x3[k - 2] + h3;
    }
    i__1 = l;
    for (k = 1; k <= i__1; ++k) {
        i__2 = m;
        for (j = 1; j <= i__2; ++j) {
            i__3 = n;
            for (i__ = 1; i__ <= i__3; ++i__) {
/* l4: */
                f_ref(i__, j, k) = x1[i__ - 1] + x2[j - 1] + x3[k - 1];
            }
        }
    }
    qtt9r_c(&rint, x1, x2, x3, f, &n, &m, &l);

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


Результат:

       rint  =  1.50000