|
Текст подпрограммы и версий qtt9r_c.zip qtt9d_c.zip |
Тексты тестовых примеров tqtt9r_c.zip tqtt9d_c.zip |
Вычисление определенного трехкратного интеграла от табличной функции, заданной на неравномерной сетке, по формуле трапеций.
По формуле трапеций вычисля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