Текст подпрограммы и версий
qttvr_c.zip  qttvd_c.zip 
Тексты тестовых примеров
tqttvr_c.zip  tqttvd_c.zip 

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

Назначение

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

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

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

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

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

    int qttvr_c (real *rint, real *x, real *f, integer *n)

Параметры

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

Версии

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

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

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

 

Требуется, чтобы   xi > xi - 1,   i = 2, ..., n;   n ≥ 2 .

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

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

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

    /* Local variables */
    static float f[50];
    static int i__, n;
    static float x, h1, s1[50], x1[50];
    extern int qttvr_c(float *, float *, float *, int *);
    int i__1;

    h1 = .064114081632653058f;
    x1[0] = 0.f;
    x1[1] = h1 / 4.f;
    n = 50;
    i__1 = n;
    for (i__ = 3; i__ <= i__1; i__ += 2) {
        x1[i__ - 1] = x1[i__ - 3] + h1 * 2.f;
/* l1: */
        x1[i__] = x1[i__ - 2] + h1 * 2.f;
    }
    i__1 = n;
    for (i__ = 1; i__ <= i__1; ++i__) {
        x = x1[i__ - 1];
/* l2: */
        f[i__ - 1] = (float)sin(x);
    }
    qttvr_c(s1, x1, f, &n);

    for (i__ = 0; i__ <= 45; i__+= 5) {
        printf("\n  %11.7f %11.7f %11.7f %11.7f %11.7f \n",
               s1[i__], s1[i__+1], s1[i__+2], s1[i__+3], s1[i__+4]);
    }
    return 0;
} /* main */


Результаты:

       s1(1)    =  0.00000
       s1(2)    =  0.00012

       s1(49)  =  1.99610
       s1(50)  =  1.99700