limes 3.1.0
Composable Calculus Expressions for C++20
Loading...
Searching...
No Matches
limes::expr::TransformedIntegral< OriginalIntegral, Phi, Jacobian > Struct Template Reference

Integral with change of variables (substitution). More...

#include <integral.hpp>

Public Types

using value_type = typename OriginalIntegral::value_type
 

Public Member Functions

constexpr TransformedIntegral (OriginalIntegral orig, Phi p, Jacobian j, value_type new_lo, value_type new_hi, value_type tol=value_type(1e-10)) noexcept
 
algorithms::integration_result< value_typeeval (std::span< value_type const > args) const
 Evaluate the transformed integral numerically.
 
algorithms::integration_result< value_typeeval () const
 
algorithms::integration_result< value_typeevaluate (std::span< value_type const > args) const
 
algorithms::integration_result< value_typeevaluate () const
 
std::string to_string () const
 

Public Attributes

OriginalIntegral original
 
Phi phi
 
Jacobian jacobian
 
value_type new_lower
 
value_type new_upper
 
value_type tolerance
 

Static Public Attributes

static constexpr std::size_t arity_v = OriginalIntegral::arity_v
 

Detailed Description

template<typename OriginalIntegral, typename Phi, typename Jacobian>
struct limes::expr::TransformedIntegral< OriginalIntegral, Phi, Jacobian >

Integral with change of variables (substitution).

Applies the transformation rule:

\[
  \int_a^b f(x) \, dx = \int_c^d f(\phi(t)) \cdot |\phi'(t)| \, dt
\]

This is useful for removing singularities or improving convergence.

Template Parameters
OriginalIntegralThe original integral type
PhiThe substitution function type (t → x)
JacobianThe Jacobian |dφ/dt| function type
Example: Removing √x singularity
// ∫₀¹ 1/√x dx has singularity at x=0
auto I = integral(1.0/sqrt(x)).over<0>(0.0, 1.0);
// Substitute x = t² to get ∫₀¹ 1/t · 2t dt = ∫₀¹ 2 dt
auto T = I.transform(
[](double t) { return t*t; }, // φ: t → t²
[](double t) { return 2*t; }, // |φ'|: 2t
0.0, 1.0 // new bounds
);
constexpr auto integral(E expr)
Create an IntegralBuilder for fluent integral construction.
Definition integral.hpp:505
constexpr auto sqrt(E e)
constexpr Var< 0, T > x
Definition var.hpp:46
See also
Integral::transform() Factory method
transforms::quadratic Predefined quadratic transform

Definition at line 544 of file integral.hpp.

Member Typedef Documentation

◆ value_type

template<typename OriginalIntegral , typename Phi , typename Jacobian >
using limes::expr::TransformedIntegral< OriginalIntegral, Phi, Jacobian >::value_type = typename OriginalIntegral::value_type

Definition at line 545 of file integral.hpp.

Constructor & Destructor Documentation

◆ TransformedIntegral()

template<typename OriginalIntegral , typename Phi , typename Jacobian >
constexpr limes::expr::TransformedIntegral< OriginalIntegral, Phi, Jacobian >::TransformedIntegral ( OriginalIntegral  orig,
Phi  p,
Jacobian  j,
value_type  new_lo,
value_type  new_hi,
value_type  tol = value_type(1e-10) 
)
inlineconstexprnoexcept

Definition at line 556 of file integral.hpp.

Member Function Documentation

◆ eval() [1/2]

◆ eval() [2/2]

◆ evaluate() [1/2]

template<typename OriginalIntegral , typename Phi , typename Jacobian >
algorithms::integration_result< value_type > limes::expr::TransformedIntegral< OriginalIntegral, Phi, Jacobian >::evaluate ( ) const
inline

◆ evaluate() [2/2]

template<typename OriginalIntegral , typename Phi , typename Jacobian >
algorithms::integration_result< value_type > limes::expr::TransformedIntegral< OriginalIntegral, Phi, Jacobian >::evaluate ( std::span< value_type const >  args) const
inline

◆ to_string()

template<typename OriginalIntegral , typename Phi , typename Jacobian >
std::string limes::expr::TransformedIntegral< OriginalIntegral, Phi, Jacobian >::to_string ( ) const
inline

Member Data Documentation

◆ arity_v

template<typename OriginalIntegral , typename Phi , typename Jacobian >
constexpr std::size_t limes::expr::TransformedIntegral< OriginalIntegral, Phi, Jacobian >::arity_v = OriginalIntegral::arity_v
staticconstexpr

Definition at line 547 of file integral.hpp.

◆ jacobian

template<typename OriginalIntegral , typename Phi , typename Jacobian >
Jacobian limes::expr::TransformedIntegral< OriginalIntegral, Phi, Jacobian >::jacobian

◆ new_lower

template<typename OriginalIntegral , typename Phi , typename Jacobian >
value_type limes::expr::TransformedIntegral< OriginalIntegral, Phi, Jacobian >::new_lower

◆ new_upper

template<typename OriginalIntegral , typename Phi , typename Jacobian >
value_type limes::expr::TransformedIntegral< OriginalIntegral, Phi, Jacobian >::new_upper

◆ original

template<typename OriginalIntegral , typename Phi , typename Jacobian >
OriginalIntegral limes::expr::TransformedIntegral< OriginalIntegral, Phi, Jacobian >::original

◆ phi

template<typename OriginalIntegral , typename Phi , typename Jacobian >
Phi limes::expr::TransformedIntegral< OriginalIntegral, Phi, Jacobian >::phi

◆ tolerance

template<typename OriginalIntegral , typename Phi , typename Jacobian >
value_type limes::expr::TransformedIntegral< OriginalIntegral, Phi, Jacobian >::tolerance

The documentation for this struct was generated from the following file: