Function intdeo

I = integral of f(x) over (a,infinity), f(x) has oscillatory factor :

void intdeo(Real, Func) (
  Func f,
  Real a,
  Real omega,
  Real* aw,
  Real* i,
  Real* err
);
f(x) = g(x) * sin(omega * x + theta) as x -> infinity

Examples

auto aw = new real[8000];
intdeoini(aw.length, tiny, eps, aw.ptr);  // initialization of aw
...
intdeo(f, a, omega, aw.ptr, &i, &err);

Parameters

NameDescription
lenaw length of aw
tiny minimum value that 1/tiny does not overflow
eps relative error requested
aw points and weights of the quadrature formula, aw[0...lenaw-1]
f integrand f(x)
a lower limit of integration
omega frequency of oscillation
i approximation to the integral
err estimate of the absolute error

Remarks

        initial parameters
            lenaw > 1000,
            IEEE double :
                lenaw = 8000;
                tiny = 1.0e-307;
        function
            f(x) needs to be analytic over (a,infinity).
        relative error
            eps is relative error requested excluding
            cancellation of significant digits.
            i.e. eps means : (absolute error) /
                             (integral_a^R |f(x)| dx).
            eps does not mean : (absolute error) / I.
        error message
            err >= 0 : normal termination.
            err < 0  : abnormal termination.
                       i.e. convergent error is detected :
                           1. f(x) or (d/dx)^n f(x) has
                              discontinuous points or sharp
                              peaks over (a,infinity).
                              you must divide the interval
                              (a,infinity) at this points.
                           2. relative error of f(x) is
                              greater than eps.