LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
LMCAS::anonymous_namespace{numerical_integration.cpp} 命名空间参考

类

struct  NormalizedInterval
struct  QuadratureCallback

函数

Result< double > checked_finite_value (Result< ApproxReal > value, const std::string &operation)
Result< QuadratureEstimate > estimated_quadrature_result (double value, double estimated_error, double sign, const std::string &operation)
Result< double > eval_bound_checked (const std::shared_ptr< SymbolicExpr > &expr, ComputationContext &context, const std::string &operation)
Result< NormalizedInterval > evaluate_interval (const std::shared_ptr< SymbolicExpr > &lower, const std::shared_ptr< SymbolicExpr > &upper, ComputationContext &context, const std::string &operation)
double evaluate_quadrature_callback (double x, void *user_data)
CasErrc quadrature_error_code (lmmc_status_t status)
template<typename T>
Result< T > quadrature_failure (lmmc_status_t status, const std::string &operation)
Result< void > validate_quadrature_args (const std::shared_ptr< SymbolicExpr > &function, const std::string &variable, const std::shared_ptr< SymbolicExpr > &lower, const std::shared_ptr< SymbolicExpr > &upper, const std::string &operation)
QuadratureEstimate zero_quadrature_result ()

类说明

◆ LMCAS::anonymous_namespace{numerical_integration.cpp}::NormalizedInterval

struct LMCAS::anonymous_namespace{numerical_integration.cpp}::NormalizedInterval

在文件 numerical_integration.cpp 第 67 行定义.

LMCAS::anonymous_namespace{numerical_integration.cpp}::NormalizedInterval 的协作图:
类成员
double lower = 0.0
double sign = 1.0
double upper = 0.0

◆ LMCAS::anonymous_namespace{numerical_integration.cpp}::QuadratureCallback

struct LMCAS::anonymous_namespace{numerical_integration.cpp}::QuadratureCallback

在文件 numerical_integration.cpp 第 94 行定义.

LMCAS::anonymous_namespace{numerical_integration.cpp}::QuadratureCallback 的协作图:
类成员
ComputationContext * context = nullptr
optional< CasError > error
const shared_ptr< SymbolicExpr > * function = nullptr
const char * operation = nullptr
const string * variable = nullptr

函数说明

◆ checked_finite_value()

Result< double > LMCAS::anonymous_namespace{numerical_integration.cpp}::checked_finite_value ( Result< ApproxReal > value,
const std::string & operation )

在文件 numerical_integration.cpp 第 21 行定义.

23 {
24 if (!value) return Result<double>::failure(value.error());
25 if (!value.value().is_finite() || !std::isfinite(value.value().value)) {
28 "numeric evaluation did not produce a finite double",
29 operation);
30 }
31 return Result<double>::success(value.value().value);
32}
static Result failure(CasErrc code, std::string message, std::string operation={})
static Result success(T value)
const std::string const ExprPtr & value

引用了 checked_finite_value(), LMCAS::Result< T >::failure(), LMCAS::NumericFailure, LMCAS::Result< T >::success() , 以及 LMCAS::value.

被这些函数引用 checked_finite_value(), eval_bound_checked() , 以及 evaluate_quadrature_callback().

函数调用图:
这是这个函数的调用关系图:

◆ estimated_quadrature_result()

Result< QuadratureEstimate > LMCAS::anonymous_namespace{numerical_integration.cpp}::estimated_quadrature_result ( double value,
double estimated_error,
double sign,
const std::string & operation )

在文件 numerical_integration.cpp 第 137 行定义.

141 {
142 value *= sign;
143 estimated_error = std::abs(estimated_error);
144 if (!std::isfinite(value) || !std::isfinite(estimated_error)) {
147 "quadrature accumulation or error estimate is non-finite",
148 operation);
149 }
150 QuadratureEstimate result;
151 result.value = value;
152 result.estimated_error = estimated_error;
154}

引用了 LMCAS::QuadratureEstimate::estimated_error, estimated_quadrature_result(), LMCAS::Result< T >::failure(), LMCAS::NumericFailure, LMCAS::Result< T >::success(), LMCAS::QuadratureEstimate::value , 以及 LMCAS::value.

被这些函数引用 estimated_quadrature_result().

函数调用图:
这是这个函数的调用关系图:

◆ eval_bound_checked()

Result< double > LMCAS::anonymous_namespace{numerical_integration.cpp}::eval_bound_checked ( const std::shared_ptr< SymbolicExpr > & expr,
ComputationContext & context,
const std::string & operation )

在文件 numerical_integration.cpp 第 34 行定义.

37 {
38 if (!expr) {
40 CasErrc::InvalidArgument, "integration bound is null", operation);
41 }
43 evaluate_numeric(*expr, NumericBindings{}, context), operation);
44}
Result< double > checked_finite_value(Result< ApproxReal > value, const std::string &operation)
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
Result< ApproxReal > evaluate_numeric(const SymbolicExpr &expression, const NumericBindings &bindings={})
std::unordered_map< std::string, double > NumericBindings

引用了 checked_finite_value(), LMCAS::context, eval_bound_checked(), LMCAS::evaluate_numeric(), LMCAS::Result< T >::failure() , 以及 LMCAS::InvalidArgument.

被这些函数引用 eval_bound_checked() , 以及 evaluate_interval().

函数调用图:
这是这个函数的调用关系图:

◆ evaluate_interval()

Result< NormalizedInterval > LMCAS::anonymous_namespace{numerical_integration.cpp}::evaluate_interval ( const std::shared_ptr< SymbolicExpr > & lower,
const std::shared_ptr< SymbolicExpr > & upper,
ComputationContext & context,
const std::string & operation )

在文件 numerical_integration.cpp 第 73 行定义.

77 {
78 auto lower_value = eval_bound_checked(lower, context, operation);
79 if (!lower_value) {
80 return Result<NormalizedInterval>::failure(lower_value.error());
81 }
82 auto upper_value = eval_bound_checked(upper, context, operation);
83 if (!upper_value) {
84 return Result<NormalizedInterval>::failure(upper_value.error());
85 }
86 NormalizedInterval interval{lower_value.value(), upper_value.value(), 1.0};
87 if (interval.lower > interval.upper) {
88 std::swap(interval.lower, interval.upper);
89 interval.sign = -1.0;
90 }
92}
Result< double > eval_bound_checked(const std::shared_ptr< SymbolicExpr > &expr, ComputationContext &context, const std::string &operation)
__attribute__((visibility("default"))) ExprResult function(const std __attribute__((visibility("default"))) ExprResult finite_set(std ExprPtr upper
ExprResult interval(ExprPtr lower, ExprPtr upper, bool lower_closed, bool upper_closed)
const ExprPtr & lower

引用了 LMCAS::context, eval_bound_checked(), evaluate_interval(), LMCAS::Result< T >::failure(), LMCAS::interval(), LMCAS::lower, LMCAS::Result< T >::success() , 以及 LMCAS::upper.

被这些函数引用 evaluate_interval().

函数调用图:
这是这个函数的调用关系图:

◆ evaluate_quadrature_callback()

double LMCAS::anonymous_namespace{numerical_integration.cpp}::evaluate_quadrature_callback ( double x,
void * user_data )

在文件 numerical_integration.cpp 第 102 行定义.

102 {
103 auto& callback = *static_cast<QuadratureCallback*>(user_data);
104 if (callback.error) return std::numeric_limits<double>::quiet_NaN();
106 bindings.emplace(*callback.variable, x);
108 evaluate_numeric(**callback.function, bindings, *callback.context),
109 callback.operation);
110 if (!value) {
111 callback.error = value.error();
112 return std::numeric_limits<double>::quiet_NaN();
113 }
114 return value.value();
115}
const std::vector< Binding > & bindings

引用了 LMCAS::bindings, checked_finite_value(), LMCAS::evaluate_numeric(), evaluate_quadrature_callback() , 以及 LMCAS::value.

被这些函数引用 evaluate_quadrature_callback().

函数调用图:
这是这个函数的调用关系图:

◆ quadrature_error_code()

CasErrc LMCAS::anonymous_namespace{numerical_integration.cpp}::quadrature_error_code ( lmmc_status_t status)

在文件 numerical_integration.cpp 第 117 行定义.

117 {
118 if (status == LMMC_STATUS_INVALID_ARGUMENT) return CasErrc::InvalidArgument;
119 if (status == LMMC_STATUS_ALLOCATION_FAILED ||
120 status == LMMC_STATUS_REFERENCE_LIMIT ||
121 status == LMMC_STATUS_WARNING_MAX_DEPTH) {
123 }
125}

引用了 LMCAS::InvalidArgument, LMCAS::NumericFailure, quadrature_error_code() , 以及 LMCAS::ResourceLimit.

被这些函数引用 quadrature_error_code() , 以及 quadrature_failure().

函数调用图:
这是这个函数的调用关系图:

◆ quadrature_failure()

template<typename T>
Result< T > LMCAS::anonymous_namespace{numerical_integration.cpp}::quadrature_failure ( lmmc_status_t status,
const std::string & operation )

在文件 numerical_integration.cpp 第 128 行定义.

128 {
129 return Result<T>::failure(
130 quadrature_error_code(status), lmmc_status_string(status), operation);
131}

引用了 LMCAS::Result< T >::failure(), quadrature_error_code() , 以及 quadrature_failure().

被这些函数引用 quadrature_failure().

函数调用图:
这是这个函数的调用关系图:

◆ validate_quadrature_args()

Result< void > LMCAS::anonymous_namespace{numerical_integration.cpp}::validate_quadrature_args ( const std::shared_ptr< SymbolicExpr > & function,
const std::string & variable,
const std::shared_ptr< SymbolicExpr > & lower,
const std::shared_ptr< SymbolicExpr > & upper,
const std::string & operation )

在文件 numerical_integration.cpp 第 46 行定义.

51 {
52 if (!function || !lower || !upper) {
55 "integrand and bounds must be non-null",
56 operation);
57 }
58 if (variable.empty()) {
61 "integration variable must not be empty",
62 operation);
63 }
64 return Result<void>::success();
65}
const std::string & variable
ExprResult function(const std::string &name, std::vector< ExprPtr > arguments)

引用了 LMCAS::Result< T >::failure(), LMCAS::function(), LMCAS::InvalidArgument, LMCAS::lower, LMCAS::Result< T >::success(), LMCAS::upper, validate_quadrature_args() , 以及 LMCAS::variable.

被这些函数引用 validate_quadrature_args().

函数调用图:
这是这个函数的调用关系图:

◆ zero_quadrature_result()

QuadratureEstimate LMCAS::anonymous_namespace{numerical_integration.cpp}::zero_quadrature_result ( )

在文件 numerical_integration.cpp 第 133 行定义.

133 {
134 return {};
135}

引用了 zero_quadrature_result().

被这些函数引用 zero_quadrature_result().

函数调用图:
这是这个函数的调用关系图: