Текст подпрограммы и версий
qts1r_c.zip  qts1d_c.zip 
Тексты тестовых примеров
tqts1r_c.zip  tqts1d_c.zip 

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

Назначение

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

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

Вычисляется значение опредeлeннoго интеграла на отрезке [x1, xN] от табличной функции f (x), заданной на равномерной сетке  x = xi + (i - 1) h,  i = 1, ..., N, по квадратурной формуле, точной для многочленов второй степени.

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

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

    int qts1r_c (real *rint, real *h, real *f, integer *n)

Параметры

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

Версии

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

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

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

 

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

В подпрограмме qts1d_c параметры rint, h, f имеют тип double.

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

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

    /* Local variables */
    static float rint, f[50], h__;
    static int i__;
    extern int qts1r_c(float *, float *, float *, int *);
    static int n;
    static float x;
    int i__1;

    h__ = .064114081632653058f;
    n = 50;
    x = 0.f;
    i__1 = n;
    for (i__ = 1; i__ <= i__1; ++i__) {
        f[i__ - 1] = (float)sin(x);
/* l1: */
        x += h__;
    }
    qts1r_c(&rint, &h__, f, &n);

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


Результат:

      rint  =  2.00000