|
Текст подпрограммы и версий qsf4r_c.zip qsf4d_c.zip |
Тексты тестовых примеров tqsf4r_c.zip tqsf4d_c.zip |
Вычисление интегралов вида
B
(1) ∫ f (x) sin( ρ x + φ ) dx ,
A
B
(2) ∫ f (x) cos( ρ x + φ ) dx
A
по формулам интерполяционного типа 5 - й степени точности с гарантированной точностью.
qsf4r_c вычисляет интегралы (1) и (2) соответственно с погрешностями
B
E ( 1 + | ∫ f (x) sin( ρ x + φ) dx | ) и
A
B
E ( 1 + | ∫ f (x) cos( ρ x + φ) dx | ) ,
A
где Е задается пользователем, по формулам интерполяционного типа, точным для полиномов 5 - ой степени с весом exp (i (ρ x + φ)), с автоматическим выбором шага.
О.В.Брушлинская, Л.Г.Васильева. Набор стандартных программ приближенного вычисления однократных интегралов с автоматическим выбором шага. Сб. "Численный анализ на ФОРТРАНе", вып. 8, Изд-во МГУ, 1974 г.
int qsf4r_c(real *rint1, real *rint2, real *a, real *b,
R_fp f, real *ro, real *fi, real *e, integer *l1, integer *l2,
real *xa)
Параметры
|
rint1 - rint2 | вещественные переменные, содержащие вычисленные значения интегралов (1) и (2); |
| a, b - | заданные нижний и верхний пределы интегрирования (тип: вещественный); |
| f - | имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x); |
| ro - | заданное значение параметра ρ (тип: вещественный); |
| fi - | заданное значение параметра φ (тип: вещественный); |
| e - | заданная точность вычисления интеграла (тип: вещественный); |
| l1, l2 - | задают режим работы подпрограммы (тип: целый); при этом, если: |
|
l1 = 1 и l2 = 0, то вычисляется интеграл (1); l1 = 0 и l2 = 1, то вычисляется интеграл (2); l1 = 1 и l2 = 1, то вычисляются интегралы (1) и (2); |
| xa - | вещественная переменная, значение которой на выходе из подпрограммы pавно либо b, если заданная точность допустима, либо значению точки "особенности" подинтегральной функции. |
Версии
| qsf4d_c - | вычисление с удвоенной точностью интегралов вида (1) и (2) по формулам интерполяционного типа 5 - й степени точности с гарантированной точностью. |
Вызываемые подпрограммы
| utqs11_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы qsf4r_c. |
| utqs13_c - | подпрограмма выдачи диагностических сообщений при работе подпрограммы qsf4d_c. |
Замечания по использованию
|
Могут встретиться случаи, когда подинтегральная функция имеет особенность, в окрестности которой шаг интегрирования становится недопустимо малым. Тогда значение XA полагается равным координате такой "особенности", подпрограммы utqs11_c, utqs13_c выдают диагностическое сообщение "заданная точность не может быть достигнута" и печатают значение XA; значения rint1 и rint2 приближенно равны значениям интегралов XA
∫ f (x) sin( ρ x + φ ) dx ,
A
XA
∫ f (x) cos( ρ x + φ ) dx .
A
| |
| В подпрограмме qsf4d_c параметры rint1, rint2, a, b, f, ro, fi, e, xa имеют тип double. |
int main(void)
{
/* Local variables */
extern int qsf4r_c(float *, float *, float *, float *, R_fp,
float *, float *, float *, int *, int *, float *);
static float a, b, e;
extern float f_c();
static int l1, l2;
static float fi, xa, ro, int1, int2;
a = 0.f;
b = 1.f;
e = 1e-4f;
ro = .01f;
fi = 0.f;
l1 = 1;
l2 = 1;
qsf4r_c(&int1, &int2, &a, &b, (R_fp)f_c, &ro, &fi, &e, &l1, &l2, &xa);
printf("\n %16.7e %16.7e \n",int1,int2);
printf("\n %16.7e %16.7e \n",xa,b);
return 0;
} /* main */
float f_c(float *x)
{
/* System generated locals */
float ret_val, r__1;
/* Builtin functions */
double sqrt(double);
if ((r__1 = *x - .5f) < 0.f) {
goto L2;
} else if (r__1 == 0) {
goto L1;
} else {
goto L4;
}
L2:
ret_val = 1.f / (float)sqrt((float)(.5f - *x));
goto L3;
L1:
ret_val = 0.f;
goto L3;
L4:
ret_val = 1.f / (float)sqrt((float)(*x - .5f));
L3:
return ret_val;
} /* f_c */
Результаты:
int1 = 2.3569619227
ха = 0.4999999988