RombergMul

View page source

Multi-dimensional Romberg Integration

Syntax

# include <cppad/utility/romberg_mul.hpp>

RombergMul < Fun , SizeVector , FloatVector , m > R

r = R ( F , a , b , n , p , e )

Description

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)}\]

Include

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

m

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.

r

The return value r has prototype

Float r

It is the estimate computed by RombergMul for the integral above (see description of Float below).

F

The object F has the prototype

Fun & F

It must support the operation

F ( x )

The argument x to F has prototype

const Float & x

The return value of F is a Float object

a

The argument a has prototype

const FloatVector & a

It specifies the lower limit for the integration (see description of FloatVector below).

b

The argument b has prototype

const FloatVector & b

It specifies the upper limit for the integration.

n

The argument n has prototype

const 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\).

p

The argument p has prototype

const 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 ] .

e

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.

Float

The type Float is defined as the type of the elements of FloatVector . The type Float must satisfy the conditions for a NumericType . 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.

FloatVector

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

Example

The file romberg_mul.cpp contains an example and test a test of using this routine.

Source Code

The source code for this routine is in the file cppad/romberg_mul.hpp .