Текст подпрограммы и версий qsr2r_c.zip |
Тексты тестовых примеров tqsr2r_c.zip |
Вычисление определенного интеграла по квадратурной формуле Pомберга с заданной абсолютной погрешностью.
qsr2r_c вычисляет интеграл b ∫ f (x) dx a
по квадратурной формуле Pомберга с заданной абсолютной погрешностью.
Бахвалов H.C. "Численные методы", т.1, "Hаука", 1973.
int qsr2r_c (real *rint, real *a, real *b, R_fp f, real *e, integer *ierr)
Параметры
rint - | вещественная переменная, содержащая вычисленное значение интеграла; |
a, b - | заданные нижний и верхний пределы интегрирования (тип: вещественный); |
f - | имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x); |
e - | заданная абсолютная погрешность вычисления интеграла (тип: вещественный); |
ierr - | целая переменная, указывающая причину окончания вычислений; если интеграл сосчитан, то ierr = 0, в противном случае ierr = 65. |
Версии: нет
Вызываемые подпрограммы
utqs11_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы qsr2r_c. |
Замечания по использованию
Если интеграл не может быть вычислен с точностью e, выдается диагностическое сообщение "заданная точность не может быть достигнута". |
int main(void) { /* Local variables */ static int ierr; static float rint, a, b, e; extern float f_c(); extern int qsr2r_c(float *, float *, float *, R_fp, float *, int *); a = 0.f; b = 1.f; e = 1e-10f; qsr2r_c(&rint, &a, &b, (R_fp)f_c, &e, &ierr); printf("\n %16.7e %5i \n",rint,ierr); return 0; } /* main */ float f_c(float *x) { /* System generated locals */ float ret_val; /* Builtin functions */ double exp(double); if (*x <= 0.f) { goto l1; } else { goto l2; } l1: ret_val = 1.f; goto l3; l2: ret_val = *x / ((float)exp(*x) - 1.f); l3: return ret_val; } /* f_c */ Результаты: rint = 0.77750463411 , ierr = 0