|
Текст подпрограммы и версий qts4r_c.zip qts4d_c.zip |
Тексты тестовых примеров tqts4r_c.zip tqts4d_c.zip |
Вычисление определенного двухкратного интеграла от табличной функции, заданной на равномерной сетке, по формуле типа Симпсона.
Вычисляется значение двойнoгo oпpеделенного интеграла от табличной функции 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 qts4r_c (real *rint, real *h1, real *h2, real *f,
integer *n, integer *m)
Параметры
| rint - | вещественная переменная, содержащая вычисленное значение интеграла; |
| h1 - | заданный шаг равномерной сетки по x (тип: вещественный); |
| h2 - | заданный шаг равномерной сетки по y (тип: вещественный); |
| f - | вещественный двумерный массив размера n на m, содержащий значения функции f (x, y); |
| n - | заданное число узлов сетки по x (тип: целый); |
| m - | заданное число узлов сетки по y (тип: целый). |
Версии
| qts4d_c - | вычисление с удвоенной точностью определенного двухкратного интеграла от табличной функции, заданной на равномерной сетке, по формуле типа Симпсона. |
Вызываемые подпрограммы: нет
Замечания по использованию
|
Требуется, чтобы n ≥ 3, m ≥ 3. В подпрограмме qts4d_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 qts4r_c(float *, float *, float *, float *,
int *, int *);
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;
}
qts4r_c(&rint, &h1, &h2, f, &n, &m);
printf("\n %16.7e \n",rint);
return 0;
} /* main */
Результат:
rint = 0.00001