Текст подпрограммы и версий qtt3r_c.zip qtt3d_c.zip |
Тексты тестовых примеров tqtt3r_c.zip tqtt3d_c.zip |
Вычисление определенного трехкратного интеграла от табличной функции, заданной на равномерной сетке, по формуле трапеций.
По формуле трапеций вычисляeтcя значение тройного определенного
интеграла от табличной функции f (x, y, z),
заданной на равномерной сетке
(xi, yj, zk),
xi = x1 + (i - 1) h1, i = 1, ..., N,
yj = y1 + (j - 1) h2, j = 1, ..., M,
zk = z1 + (k - 1) h3,
k = 1, ..., L .
Н.С.Бахвалов. Численные методы, "Hаука", M., 1975.
int qtt3r_c (real *rint, real *h1, real *h2, real *h3, real *f, integer *n, integer *m, integer *l)
Параметры
rint - | вещественная переменная, содержащая вычисленное значение интеграла; |
h1 - | заданный шаг равномерной сетки по x (тип: вещественный); |
h2 - | заданный шаг равномерной сетки по y (тип: вещественный); |
h3 - | заданный шаг равномерной сетки по z (тип: вещественный); |
f - | вещественный трехмерный массив размера n на m на l, содержащий значения функции f (x, y, z); |
n - | заданное число узлов сетки по x (тип: целый); |
m - | заданное число узлов сетки по y (тип: целый); |
l - | заданное число узлов сетки по z (тип: целый). |
Версии
qtt3d_c - | вычисление с удвоенной точностью определенного трехкратного интеграла от табличной функции, заданной на равномерной сетке, по формуле трапеций. |
Вызываемые подпрограммы: нет
Замечания по использованию
Требуется, чтобы n ≥ 2, m ≥ 2, l ≥ 2. В подпрограмме qtt3d_c параметры rint, h1, h2, h3, 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 qtt3r_c(float *, float *, float *, float *, float *, int *, int *, int *); int i__1, i__2, i__3; static float x, y, z__, h1, h2, h3; #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; z__ = 0.f; i__1 = l; for (k = 1; k <= i__1; ++k) { y = 0.f; i__2 = m; for (j = 1; j <= i__2; ++j) { x = 0.f; i__3 = n; for (i__ = 1; i__ <= i__3; ++i__) { f_ref(i__, j, k) = x + y + z__; /* l3: */ x += h1; } /* l2: */ y += h2; } /* l1: */ z__ += h3; } qtt3r_c(&rint, &h1, &h2, &h3, f, &n, &m, &l); printf("\n %16.7e \n",rint); return 0; } /* main */ Результат: rint = 1.50000