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}} }@)@This is cppad-20221105 documentation. Here is a link to its current documentation .
Multi-dimensional Romberg Integration

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

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

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 Rombergmul.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.
Input File: include/cppad/utility/romberg_mul.hpp