|
Текст подпрограммы и версий qsr1r_c.zip qsr1d_c.zip |
Тексты тестовых примеров tqsr1r_c.zip tqsr1d_c.zip |
Вычисление определенного интеграла по квадратурной формуле Pомберга.
qsr1r_c вычисляет интеграл
b
∫ f (x) dx
a
по квадратурной формуле Pомберга с заданным числом узлов интегрирования.
Н.С.Бахвалов. "Численные методы", т.1, "Hаука", 1973.
int qsr1r_c (real *rint, real *a, real *b, R_fp f, integer *k,
integer *ierr)
Параметры
| rint - | вещественная переменная, содержащая вычисленное значение интеграла; |
| a, b - | заданные нижний и верхний пределы интегрирования (тип: вещественный); |
| f - | имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x); |
| k - | целая переменная, определяющая число узлов интегрирования N ( N = 2k + 1, 0 < k≤ 20 ); |
| ierr - | целая переменная, указывающая причину окончания вычислений: если интеграл сосчитан, то ierr = 0, в противном случае ierr = 65. |
Версии
| qsr1d_c - | вычисление с удвоенной точностью определенного интеграла по квадратурной формуле Pомберга. |
Вызываемые подпрограммы
| utqs11_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы qsr1r_c. |
| utqs13_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы qsr1d_c. |
Замечания по использованию
|
При k > 20 выдается диагностическое сообщение "заданное значение k выходит за пределы допустимых значений". В подпрограмме qsr1d_c параметры rint, a, b, f имеют тип double. |
int main(void)
{
/* Local variables */
static int ierr;
static float rint, a, b;
extern float f_c();
extern int qsr1r_c(float *, float *, float *, R_fp, int *, int *);
static int k;
a = 0.f;
b = 1.f;
k = 10;
qsr1r_c(&rint, &a, &b, (R_fp)f_c, &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 exp(double);
ret_val = 1.f / ((float)exp(*x) + 1.f);
return ret_val;
} /* f_c */
Результаты:
rint = 0.37988549298
k = 10
ierr = 0