Текст подпрограммы и версий qst1r_c.zip |
Тексты тестовых примеров tqst1r_c.zip |
Вычисление определенного интеграла по обобщенной квадратурной формуле трапеции.
Подпрограмма qst1r_c вычисляет интеграл B ∫ f (x) dx A
с заданной абсолютной погрешностью E по обобщенной квадратурной формуле трапеции с шагом h = (B - A)/K, где K - число частичных отрезков разбиения.
Л.Г.Васильева. Набор стандартных программ численного интегрирования с фиксированным распределением узлов. Сб. "Численный анализ на ФОРТРАНе", вып.8, Изд - во МГУ, 1974.
int qst1r_c (real *rint, real *a, real *b, R_fp f, real *e, integer *k, integer *ierr)
Параметры
rint - | вещественная переменная, содержащая вычисленное значение интеграла; |
a, b - | заданные нижний и верхний пределы интегрирования (тип: вещественный); |
f - | имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x); |
e - | заданная абсолютная погрешность вычисления интеграла (тип: вещественный); |
k - | целая переменная, задающая число частичных отрезков разбиения; |
ierr - | целая переменная, служащая для сообщения об ошибках, обнаруженных в ходе работы подпрограммы; при этом: |
ierr=65 - | когда заданная точность не может быть достигнута при максимально возможном числе частичных отрезков разбиения; значение k полагается равным 1048576. |
Версии: нет
Вызываемые подпрограммы
utqs10_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы qst1r_c. |
Замечания по использованию
Проводятся два последовательных просчета интеграла по всему отрезку интегрирования по k и 2 k частичным отрезкам. Если абсолютная величина разности этих двух последовательных просчетов не превосходит e, то счет заканчивается и за значение интеграла принимается результат последнего просчета. B противном случае, значение k удваивается и процесс повторяется. При e ≤ 0 происходит только один просчет при заданном значении k. Максимальное значение k, котоpое можно задавать, не должно превосходить 524288. Если заданная точность не может быть достигнута, то k полагается равным 1048576. При выходе из подпрограммы значение k полагается равным числу частичных отрезков разбиения, при котоpом проводился последний просчет интеграла. |
int main(void) { /* Local variables */ static int ierr; static float rint, a, b, e; extern float f_c(); extern int qst1r_c(float *, float *, float *, R_fp, float *, int *, int *); static int k; k = 1; e = 1e-4f; b = 1.570796326795f; a = -b; qst1r_c(&rint, &a, &b, (R_fp)f_c, &e, &k, &ierr); printf("\n %16.7e %5i %5i \n",rint,k,ierr); return 0; } /* main */ float f_c(float *x) { /* System generated locals */ float ret_val; /* Builtin functions */ double cos(double); ret_val = 1.f / ((float)cos(*x) + 1.f); return ret_val; } /* f_c */ Результаты: rint = 2.000 000 0227 k = 8192 ierr = 0