Prev Next

@(@\newcommand{\W}[1]{ \; #1 \; } \newcommand{\R}[1]{ {\rm #1} } \newcommand{\B}[1]{ {\bf #1} } \newcommand{\D}[2]{ \frac{\partial #1}{\partial #2} } \newcommand{\DD}[3]{ \frac{\partial^2 #1}{\partial #2 \partial #3} } \newcommand{\Dpow}[2]{ \frac{\partial^{#1}}{\partial {#2}^{#1}} } \newcommand{\dpow}[2]{ \frac{ {\rm d}^{#1}}{{\rm d}\, {#2}^{#1}} }@)@
Multi-dimensional Romberg Integration

# include <cppad/utility/romberg_mul.hpp>
r = R(Fabnpe)

Returns the Romberg integration estimate @(@ r @)@ for the multi-dimensional integral @[@ r = \int_{a[0]}^{b[0]} \cdots \int_{a[m-1]}^{b[m-1]} \; F(x) \; {\bf d} x_0 \cdots {\bf d} x_{m-1} \; + \; \sum_{i=0}^{m-1} O \left[ ( b[i] - a[i] ) / 2^{n[i]-1} \right]^{2(p[i]+1)} @]@

The file cppad/romberg_mul.hpp is included by cppad/cppad.hpp but it can also be included separately with out the rest of the CppAD routines.

The template parameter m must be convertible to a size_t object with a value that can be determined at compile time; for example 2. It determines the dimension of the domain space for the integration.

The return value r has prototype
Float r
It is the estimate computed by RombergMul for the integral above (see description of Float below).

The object F has the prototype
Fun &F
It must support the operation
The argument x to F has prototype
Float &x
The return value of F is a Float object

The argument a has prototype
FloatVector &a
It specifies the lower limit for the integration (see description of FloatVector below).

The argument b has prototype
FloatVector &b
It specifies the upper limit for the integration.

The argument n has prototype
SizeVector &n
A total number of @(@ 2^{n[i]-1} + 1 @)@ evaluations of F(x) are used to estimate the integral with respect to @(@ {\bf d} x_i @)@.

The argument p has prototype
SizeVector &p
For @(@ i = 0 , \ldots , m-1 @)@, @(@ n[i] @)@ determines the accuracy order in the approximation for the integral that is returned by RombergMul. The values in p must be less than or equal n ; i.e., p[i] <= n[i] .

The argument e has prototype
Float &e
The input value of e does not matter and its output value is an approximation for the absolute error in the integral estimate.

The type Float is defined as the type of the elements of FloatVector . The type Float must satisfy the conditions for a NumericType type. The routine CheckNumericType will generate an error message if this is not the case. In addition, if x and y are Float objects,
x < y
returns the bool value true if x is less than y and false otherwise.

The type FloatVector must be a SimpleVector class. The routine CheckSimpleVector will generate an error message if this is not the case.

The file Rombergmul.cpp contains an example and test a test of using this routine. It returns true if it succeeds and false otherwise.

Source Code
The source code for this routine is in the file cppad/romberg_mul.hpp.
Input File: cppad/utility/romberg_mul.hpp