Текст подпрограммы и версий qsk2r_c.zip qsk2d_c.zip |
Тексты тестовых примеров tqsk2r_c.zip tqsk2d_c.zip |
Вычисление определенного интеграла по обобщенной квадратурной формуле Ньютона - Котеса, точной для многочленов девятой степени.
Подпрограмма qsk2r_c вычисляет интеграл B ∫ f (x) dx A
по обобщенной формуле Ньютона - Котеса с автоматическим выбором шага.
G.E.Forsythe, M.A.Malkolm, C.B.Moler. Computer Methods for Mathematical Computations. 1977 by Prentice - hall, INC.
int qsk2r_c (R_fp fun, real *a, real *b, real *abserr, real *relerr, real *result, real *errest, integer *nofun, real *flag)
Параметры
fun - | имя вещественной подпрограммы - функции, вычисляющей подинтегральную функцию f (x); |
a, b - | заданные нижний и верхний пределы интегрирования (тип: вещественный); |
abserr - | заданная абсолютная погрешность вычисления интеграла (тип: вещественный); |
relerr - | заданная относительная погрешность вычисления интеграла (тип: вещественный); |
result - | вещественная переменная, содержащая вычисленное значение интеграла; |
errest - | вещественная переменная, содержащая оценку погрешности вычисленного значения интеграла; |
nofun - | целая переменная, содержащая число вычисленных значений подинтегральной функции, потребовавшихся для получения результата; |
flag - |
вещественная переменная, служащая для
хаpактеристики надежности вычисленного результата;
при этом: если flag = 0., то полученный результат с большой вероятностью удовлетворяет заданной погрешности; если flag = xxx.yyy, то xxx - число интервалов, на которых не удалось достигнуть заданной точности, а 0.yyy = (b - x0)/(b - a), где x0 - граница отрезка [a, x0], на котоpом был израсходован лимит обращений к подпрограмме - функции. |
Версии
qsk2d_c - | вычисление определенного интеграла по обобщенной формуле Ньютона - Котеса, точной для многочленов девятой степени от функции, заданной с удвоенной точностью. |
Вызываемые подпрограммы: нет
Замечания по использованию
B подпрограмме qsk2d_c параметры fun, a, b, abserr, relerr, result, errest, flag имеют тип double. |
int main(void) { /* Local variables */ static float flag__, a, b; extern int qsk2r_c(R_fp, float *, float *, float *, float *, float *, float *, int *, float *); static int nofun; static float abserr, relerr, errest, result; extern float fun_c(); a = 0.f; b = 2.f; relerr = 1e-10f; abserr = 0.f; qsk2r_c((R_fp)fun_c, &a, &b, &abserr, &relerr, &result, &errest, &nofun, &flag__); printf("\n result = %16.7e errest = %16.7e \n",result,errest); if (flag__ != 0.f) { printf("\n flag = %16.7e \n",flag__); } printf("\n %10i \n",nofun); return 0; } /* main */ float fun_c(float *x) { /* System generated locals */ float ret_val; /* Builtin functions */ double sin(double); if (*x == 0.f) { ret_val = 1.f; } if (*x != 0.f) { ret_val = (float)sin(*x) / *x; } return ret_val; } /* fun_c */ Результаты: result = 1.6054 errest = 0. nofun = 33 flag__ = 0.