deal.II version GIT relicensing-2167-g9622207b8f 2024-11-21 12:40:00+00:00
|
Functions | |
template<int dim> | |
void | taylor_estimate_function_bounds (const Function< dim > &function, const BoundingBox< dim > &box, std::pair< double, double > &value_bounds, std::array< std::pair< double, double >, dim > &gradient_bounds, const unsigned int component=0) |
void FunctionTools::taylor_estimate_function_bounds | ( | const Function< dim > & | function, |
const BoundingBox< dim > & | box, | ||
std::pair< double, double > & | value_bounds, | ||
std::array< std::pair< double, double >, dim > & | gradient_bounds, | ||
const unsigned int | component = 0 |
||
) |
Estimate bounds on the value and bounds on each gradient component of a Function, \(f\), over a BoundingBox, by approximating it by a 2nd order Taylor polynomial starting from the box center.
Each lower and upper bound is returned as a std::pair<double, double>
, such that the first entry is the lower bound, \(L\), and the second is the upper bound, \(U\), i.e. \(f(x) \in [L, U]\).
The function value, gradient, and Hessian are computed at the box center. The bounds on the value of the function are then estimated as
\(f(x) \in [f(x_c) - F, f(x_c) + F]\), where \(F = \sum_i |\partial_i f(x_c)| h_i + 1/2 \sum_i \sum_j |\partial_i \partial_j f(x_c)| h_i h_j\).
Here, \(h_i\) is half the side length of the box in the \(i\)th coordinate direction, which is the distance we extrapolate. The bounds on the gradient components are estimated similarly as
\(\partial_i f \in [\partial_i f(x_c) - G_i, \partial_i f(x_c) + G_i]\), where \(G_i = \sum_j |\partial_i \partial_j f(x_c)| h_j\).
If the function has more than 1 component the component
parameter can be used to specify which function component the bounds should be computed for.
Definition at line 25 of file function_tools.cc.