|
|
◆ qags_r()
| void qags_r |
( |
double |
a, |
|
|
double |
b, |
|
|
double |
epsabs, |
|
|
double |
epsrel, |
|
|
int |
limit, |
|
|
double * |
result, |
|
|
double * |
abserr, |
|
|
int * |
neval, |
|
|
int * |
last, |
|
|
double |
work[], |
|
|
int |
lwork, |
|
|
int |
iwork[], |
|
|
int * |
info, |
|
|
double * |
xx, |
|
|
double |
yy, |
|
|
int * |
irev |
|
) |
| |
Finite interval adaptive quadrature with sigularities (21 point Gauss-Kronrod rule) (reverse communication version)
- Purpose
- This routine computes I = integral of f over [a, b], satisfying the requested accuracy, where f is a given function with singularities. User should provide the necessary computed values of f according to the argument irev.
21 point Gauss-Kronrod rule is used, and the integration interval will be adaptively subdivided to satisfy the requested accuracy in connection with extrapolation, which will eliminate the effects of integrand singularities of several types.
- Parameters
-
| [in] | a | Lower limit of integration. |
| [in] | b | Upper limit of integration. |
| [in] | epsabs | Absolute accuracy requested.
The requested accuracy is assumed to be satisfied if abserr <= max(epsabs, epsrel*|result|)). |
| [in] | epsrel | Relative accuracy requested.
The requested accuracy is assumed to be satisfied if abserr <= max(epsabs, epsrel*|result|)).
If epsabs <= 0 and epsrel < 50*eps, epsrel is assumed to be 50*eps, where eps is the machine precision. |
| [in] | limit | Maximum number of subintervals in the partition of the given integration interval [a, b]. (limit >= 1) |
| [out] | result | Approximation to I = integral of f over [a, b]. |
| [out] | abserr | Estimate of the modulus of the absolute error, which should equal or exceed the true error. |
| [out] | neval | Number of integrand evaluations. |
| [out] | last | Number of subintervals produced in the subdivision process. |
| [out] | work[] | Array work[lwork]
Work array.
work[0], ..., work[last-1]: Left end points of the subintervals in the partition of [a, b].
work[limit], ..., work[limit+last-1]: Right end poits of the subintervals.
work[2*limit], ..., work[2*limit+last-1]: The integral approximations over the subintervals.
work[3*limit], ..., work[3*limit+last-1]: The error estimates over the subintervals. |
| [in] | lwork | The length of work[]. (lwork >= 4*limit) |
| [out] | iwork[] | Array iwork[liwork] (liwork >= limit)
Work array.
The first k elements contain pointers to the error estimates over the subintervals, such that work[3*limit+iwork[0]-1], ..., work[3*limit+iwork[k-1]-1] form a decreasing sequence with k = last if last <= limit/2+2, and k = limit+1-last otherwise. |
| [out] | info | = 0: Successful exit
= -5: The argument limit had an illegal value (limit < 1)
= -11: The argument lwork had an illegal value (lwork < 4*limit)
= 1: Maximum number of subdivisions allowed has been achieved
= 2: The occurrence of roundoff error is detected
= 3: Extremely bad integrand behaviour occurs
= 4: The algorithm does not converge. roundoff error is detected in the extrapolation table
= 5: The integral is probably divergent, or slowly convergent |
| [out] | xx | irev = 1 to 15: xx contains the abscissa where the function value should be evaluated and given in the next call. |
| [in] | yy | irev = 1 to 15: The function value f(xx) should be given in yy in the next call. |
| [in,out] | irev | Control variable for reverse communication.
[in] Before first call, irev should be initialized to zero. On succeeding calls, irev should not be altered.
[out] If irev is not zero, complete the following tasks and call this routine again without changing irev.
= 0: Computation finished.
= 1 to 15: User should set the function value at xx in yy. Do not alter any variables other than yy. |
- Reference
- SLATEC (QUADPACK)
|