limes 3.1.0
Composable Calculus Expressions for C++20
Loading...
Searching...
No Matches
box_integral.hpp File Reference

N-dimensional box integration with Monte Carlo methods. More...

#include <span>
#include <string>
#include <array>
#include <cstddef>
#include <sstream>
#include <utility>
#include <random>
#include "../algorithms/core/result.hpp"
#include "../methods/methods.hpp"
#include "nodes/binary.hpp"
+ Include dependency graph for box_integral.hpp:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  limes::expr::BoxIntegral< E, Dims >
 N-dimensional integral over a rectangular box. More...
 
struct  limes::expr::ConstrainedBoxIntegral< E, Dims, Constraint >
 Box integral with constraint for irregular regions. More...
 
struct  limes::expr::is_box_integral< T >
 
struct  limes::expr::is_box_integral< BoxIntegral< E, D > >
 
struct  limes::expr::is_constrained_box_integral< T >
 
struct  limes::expr::is_constrained_box_integral< ConstrainedBoxIntegral< E, D, C > >
 

Namespaces

namespace  limes
 
namespace  limes::expr
 Expression layer for composable calculus.
 
namespace  limes::expr::detail
 

Functions

template<typename E , std::size_t Dims>
constexpr auto limes::expr::over_box (E expr, std::array< std::pair< typename E::value_type, typename E::value_type >, Dims > bounds)
 Create a box integral from an expression.
 
template<typename E >
auto limes::expr::box2d (E expr, typename E::value_type x0, typename E::value_type x1, typename E::value_type y0, typename E::value_type y1)
 Create a 2D box integral (specialization for common case)
 
template<typename E >
auto limes::expr::box3d (E expr, typename E::value_type x0, typename E::value_type x1, typename E::value_type y0, typename E::value_type y1, typename E::value_type z0, typename E::value_type z1)
 Create a 3D box integral (specialization for common case)
 

Variables

template<typename T >
constexpr bool limes::expr::is_box_integral_v = is_box_integral<T>::value
 
template<typename T >
constexpr bool limes::expr::is_constrained_box_integral_v = is_constrained_box_integral<T>::value
 

Detailed Description

N-dimensional box integration with Monte Carlo methods.

This module provides BoxIntegral for integrating expressions over rectangular N-dimensional regions, and ConstrainedBoxIntegral for irregular regions via rejection sampling.

Usage

using namespace limes::expr;
using namespace limes::methods;
auto x = arg<0>;
auto y = arg<1>;
auto z = arg<2>;
// 3D integral over unit cube
auto I = integral(x*y*z).over_box({{0,1}, {0,1}, {0,1}});
auto result = I.eval(monte_carlo_method(100000));
// Integral with constraint (triangle region y < x)
auto J = integral(x*y)
.over_box({{0,1}, {0,1}})
.where([](auto x, auto y) { return y < x; });
auto r2 = J.eval(100000); // sample count
constexpr auto integral(E expr)
Create an IntegralBuilder for fluent integral construction.
Definition integral.hpp:505
Expression layer for composable calculus.
Definition analysis.hpp:7
constexpr Var< 1, T > y
Definition var.hpp:49
constexpr Var< 0, T > x
Definition var.hpp:46
constexpr auto monte_carlo_method(std::size_t n)
Factory for Monte Carlo integration.
Definition methods.hpp:162
See also
BoxIntegral For rectangular regions
ConstrainedBoxIntegral For irregular regions
monte_carlo Monte Carlo method object

Definition in file box_integral.hpp.