Текст подпрограммы и версий
qtt4r_c.zip  qtt4d_c.zip 
Тексты тестовых примеров
tqtt4r_c.zip  tqtt4d_c.zip 

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

Назначение

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

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

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

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

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

    int qtt4r_c (real *rint, real *h1, real *h2, integer *n,
            integer *m, real *f)

Параметры

rint - вещественная переменная, содержащая вычисленное значение интеграла;
h1 - заданный шаг равномерной сетки по x (тип: вещественный);
h2 - заданный шаг равномерной сетки по y (тип: вещественный);
n - заданное число узлов сетки по x (тип: целый);
m - заданное число узлов сетки по y (тип: целый);
f - вещественный двумерный массив размера n на m, содержащий значения функции f (x, y).

Версии

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

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

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

 

Требуется, чтобы   n ≥ 2,   m ≥ 2.

В подпрограмме qtt4d_c параметры rint, h1, h2, f имеют тип double.

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

int main(void)
{
    /* Builtin functions */
    double sin(double);

    /* Local variables */
    static float rint, f[2000]   /* was [50][40] */;
    static int i__, j, m, n;
    extern int qtt4r_c(float *, float *, float *, int *,
                       int *, float *);
    static float x, y, h1, h2;
    int i__1, i__2;

#define f_ref(a_1,a_2) f[(a_2)*50 + a_1 - 51]

    h1 = .064114081632653058f;
    h2 = .08055358974358974f;
    n = 50;
    m = 40;
    y = 0.f;
    i__1 = m;
    for (j = 1; j <= i__1; ++j) {
        x = y;
        i__2 = n;
        for (i__ = 1; i__ <= i__2; ++i__) {
            f_ref(i__, j) = (float)sin(x);
/* l2: */
            x += h1;
        }
/* l1: */
        y += h2;
    }
    qtt4r_c(&rint, &h1, &h2, &n, &m, f);

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


Результат:

       rint  =  0.00001