Текст подпрограммы и версий
qtgcr_c.zip  qtgcd_c.zip 
Тексты тестовых примеров
tqtgcr_c.zip  tqtgcd_c.zip 

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

Назначение

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

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

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

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

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

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

Параметры

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

Версии

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

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

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

 

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

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

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

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

    /* Local variables */
    static float rint[50], f[50], h__;
    static int i__, n;
    static float x;
    extern int qtgcr_c(float *, float *, float *, int *);
    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__;
    }
    qtgcr_c(rint, &h__, 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