|
Текст подпрограммы и версий qtscr_c.zip qtscd_c.zip |
Тексты тестовых примеров tqtscr_c.zip tqtscd_c.zip |
Вычисление неопределенного однократного интеграла от табличной функции, заданной на равномерной сетке, по формуле Симпсона.
Вычисляются значения неопрeдeлeнного интеграла на отрезках [x1, xi] i = 1, ..., N, от табличной функции f (x), заданной на равномерной сетке xi = x1 + (i - 1) h, i = 1, ..., N, по квадратурной формуле, точной для многочленов второй степени.
Н.С.Бахвалов. Численные методы, "Hаука", M., 1975.
int qtscr_c (real *rint, real *h, real *f, integer *n)
Параметры
| rint - | вещественный вектоp длины n, содержащий вычисленные значения неопределенного интеграла; |
| h - | заданный шаг равномерной сетки (тип: вещественный); |
| f - | вещественный вектоp длины n, содержащий значения функции f (x); |
| n - | заданное число узлов сетки (тип: целый). |
Версии
| qtscd_c - | вычисление с удвоенной точностью неопределенного однократного интеграла от табличной функции, заданной на равномерной сетке, по формуле Симпсона. |
Вызываемые подпрограммы: нет
Замечания по использованию
|
Требуется, чтобы n ≥ 3. В подпрограмме qtscd_c параметры rint, h, f имеют тип double. |
int main(void)
{
/* Builtin functions */
double sin(double);
/* Local variables */
static float rint[50], f[50];
static int i__, n;
static float x, h1;
extern int qtscr_c(float *, float *, float *, int *);
static float x1[50];
int i__1;
h1 = .064114081632653058f;
x1[0] = 0.f;
n = 50;
i__1 = n;
for (i__ = 2; i__ <= i__1; ++i__) {
/* l1: */
x1[i__ - 1] = x1[i__ - 2] + h1;
}
i__1 = n;
for (i__ = 1; i__ <= i__1; ++i__) {
x = x1[i__ - 1];
/* l2: */
f[i__ - 1] = (float)sin(x);
}
qtscr_c(rint, &h1, f, &n);
for (i__ = 0; i__ <= 45; i__+= 5) {
printf("\n %11.7f %11.7f %11.7f %11.7f %11.7f \n",
rint[i__], rint[i__+1], rint[i__+2], rint[i__+3], rint[i__+4]);
}
return 0;
} /* main */
Результаты:
rint(1) = 0.00000
rint(2) = 0.00205
rint(49) = 1.99794
rint(50) = 2.00000