LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
LMCAS::calculus_utils_detail 命名空间参考

函数

bool calculus_utils_expr_equal (const std::shared_ptr< SymbolicExpr > &a, const std::shared_ptr< SymbolicExpr > &b)
 判断两个表达式是否结构相等.
bool calculus_utils_is_infinity (const std::shared_ptr< SymbolicExpr > &expr)
 判断表达式是否包含无穷大节点.
std::shared_ptr< SymbolicExpr > calculus_utils_make_abs (const std::shared_ptr< SymbolicExpr > &expr)
Result< void > calculus_utils_validate_expr (const std::shared_ptr< SymbolicExpr > &expr, const std::string &var, ComputationContext &context, const std::string &operation)
Result< void > calculus_utils_validate_expr_bounds (const std::shared_ptr< SymbolicExpr > &expr, const std::string &var, const std::shared_ptr< SymbolicExpr > &a, const std::shared_ptr< SymbolicExpr > &b, ComputationContext &context, const std::string &operation)
Result< void > calculus_utils_validate_expr_target (const std::shared_ptr< SymbolicExpr > &expr, const std::string &var, const std::shared_ptr< SymbolicExpr > &target, ComputationContext &context, const std::string &operation)
Result< void > calculus_utils_validate_two_exprs (const std::shared_ptr< SymbolicExpr > &first, const std::shared_ptr< SymbolicExpr > &second, const std::string &var, ComputationContext &context, const std::string &operation)
static bool is_infinity_node (const std::shared_ptr< const SymbolicNode > &node)

函数说明

◆ calculus_utils_expr_equal()

bool LMCAS::calculus_utils_detail::calculus_utils_expr_equal ( const std::shared_ptr< SymbolicExpr > & a,
const std::shared_ptr< SymbolicExpr > & b )

判断两个表达式是否结构相等.

在文件 calculus_utils.cpp 第 119 行定义.

121{
122 const bool a_exists = a && LMCAS::detail::node(a);
123 const bool b_exists = b && LMCAS::detail::node(b);
124 if (!a_exists || !b_exists) {
125 return a_exists == b_exists;
126 }
127 return LMCAS::detail::node(a)->equals(*LMCAS::detail::node(b));
128}
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
const MultiPoly & b
__attribute__((visibility("default"))) VectorCalculusExprResult curve_integral_scalar_checked(const std __attribute__((visibility("default"))) VectorCalculusExprResult curve_integral_scalar_checked(const std __attribute__((visibility("default"))) std const VectorField const std::string const std::shared_ptr< SymbolicExpr > & a

引用了 LMCAS::a, LMCAS::b, calculus_utils_expr_equal() , 以及 LMCAS::detail::node().

被这些函数引用 calculus_utils_expr_equal(), LMCAS::collect_infinite_asymptotes() , 以及 LMCAS::has_oblique_asymptote().

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

◆ calculus_utils_is_infinity()

bool LMCAS::calculus_utils_detail::calculus_utils_is_infinity ( const std::shared_ptr< SymbolicExpr > & expr)

判断表达式是否包含无穷大节点.

在文件 calculus_utils.cpp 第 96 行定义.

97{
98 if (!expr || !LMCAS::detail::node(expr)) {
99 return false;
100 }
101
102 if (auto f = std::dynamic_pointer_cast<const FunctionNode>(LMCAS::detail::node(expr))) {
103 return f->type() == FunctionNode::FuncType::Infinity;
104 }
105 if (auto m = std::dynamic_pointer_cast<const MultiplyNode>(LMCAS::detail::node(expr))) {
106 for (auto& op : m->operands()) {
107 if (is_infinity_node(op)) {
108 return true;
109 }
110 }
111 }
112 return false;
113}
static bool is_infinity_node(const std::shared_ptr< const SymbolicNode > &node)
const ExprPtr RelationOp op

引用了 calculus_utils_is_infinity(), LMCAS::FunctionNode::Infinity, is_infinity_node(), LMCAS::detail::node() , 以及 LMCAS::op.

被这些函数引用 calculus_utils_is_infinity(), LMCAS::collect_oblique_asymptote(), LMCAS::collect_vertical_asymptotes() , 以及 LMCAS::simplify_finite_limit().

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

◆ calculus_utils_make_abs()

std::shared_ptr< SymbolicExpr > LMCAS::calculus_utils_detail::calculus_utils_make_abs ( const std::shared_ptr< SymbolicExpr > & expr)

在文件 calculus_utils.cpp 第 129 行定义.

131{
132 if (!expr || !LMCAS::detail::node(expr)) {
133 return nullptr;
134 }
138 std::vector<std::shared_ptr<const SymbolicNode>>{LMCAS::detail::node(expr)}));
139}
std::shared_ptr<::LMCAS::SymbolicExpr > make_expression_ptr(SymbolicNodePtr root)
std::shared_ptr< const Node > make_node(Args &&... args)

引用了 LMCAS::FunctionNode::Abs, calculus_utils_make_abs(), LMCAS::detail::make_expression_ptr(), LMCAS::detail::make_node() , 以及 LMCAS::detail::node().

被这些函数引用 calculus_utils_make_abs(), LMCAS::curvature_checked(), LMCAS::curvature_parametric_checked(), LMCAS::surface_area_revolution_x_checked() , 以及 LMCAS::surface_area_revolution_y_checked().

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

◆ calculus_utils_validate_expr()

Result< void > LMCAS::calculus_utils_detail::calculus_utils_validate_expr ( const std::shared_ptr< SymbolicExpr > & expr,
const std::string & var,
ComputationContext & context,
const std::string & operation )

在文件 calculus_utils.cpp 第 7 行定义.

11{
12 auto step = context.consume_steps(1, operation);
13 if (!step) {
14 return step;
15 }
16 if (!expr || !LMCAS::detail::node(expr)) {
18 "expression cannot be null", operation);
19 }
20 if (var.empty()) {
22 "variable name cannot be empty", operation);
23 }
24 return Result<void>::success();
25}
static Result failure(CasErrc code, std::string message, std::string operation={})
static Result success(T value)
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context

引用了 calculus_utils_validate_expr(), LMCAS::context, LMCAS::Result< T >::failure(), LMCAS::InvalidArgument, LMCAS::detail::node() , 以及 LMCAS::Result< T >::success().

被这些函数引用 LMCAS::asymptotes_checked(), calculus_utils_validate_expr(), calculus_utils_validate_expr_bounds(), calculus_utils_validate_expr_target(), LMCAS::continuity_at_checked(), LMCAS::curvature_checked() , 以及 LMCAS::inflection_points_checked().

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

◆ calculus_utils_validate_expr_bounds()

Result< void > LMCAS::calculus_utils_detail::calculus_utils_validate_expr_bounds ( const std::shared_ptr< SymbolicExpr > & expr,
const std::string & var,
const std::shared_ptr< SymbolicExpr > & a,
const std::shared_ptr< SymbolicExpr > & b,
ComputationContext & context,
const std::string & operation )

在文件 calculus_utils.cpp 第 68 行定义.

75{
76 auto input = calculus_utils_validate_expr(expr, var, context, operation);
77 if (!input) {
78 return input;
79 }
80 if (!a || !LMCAS::detail::node(a) || !b || !LMCAS::detail::node(b)) {
82 "bounds cannot be null", operation);
83 }
84 return Result<void>::success();
85}
Result< void > calculus_utils_validate_expr(const std::shared_ptr< SymbolicExpr > &expr, const std::string &var, ComputationContext &context, const std::string &operation)

引用了 LMCAS::a, LMCAS::b, calculus_utils_validate_expr(), calculus_utils_validate_expr_bounds(), LMCAS::context, LMCAS::Result< T >::failure(), LMCAS::InvalidArgument, LMCAS::detail::node() , 以及 LMCAS::Result< T >::success().

被这些函数引用 calculus_utils_validate_expr_bounds(), LMCAS::surface_area_revolution_x_checked() , 以及 LMCAS::surface_area_revolution_y_checked().

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

◆ calculus_utils_validate_expr_target()

Result< void > LMCAS::calculus_utils_detail::calculus_utils_validate_expr_target ( const std::shared_ptr< SymbolicExpr > & expr,
const std::string & var,
const std::shared_ptr< SymbolicExpr > & target,
ComputationContext & context,
const std::string & operation )

在文件 calculus_utils.cpp 第 49 行定义.

55{
56 auto input = calculus_utils_validate_expr(expr, var, context, operation);
57 if (!input) {
58 return input;
59 }
62 "target expression cannot be null",
63 operation);
64 }
65 return Result<void>::success();
66}
const ExprPtr & target

引用了 calculus_utils_validate_expr(), calculus_utils_validate_expr_target(), LMCAS::context, LMCAS::Result< T >::failure(), LMCAS::InvalidArgument, LMCAS::detail::node(), LMCAS::Result< T >::success() , 以及 LMCAS::target.

被这些函数引用 calculus_utils_validate_expr_target(), LMCAS::inverse_derivative_checked() , 以及 LMCAS::inverse_function_checked().

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

◆ calculus_utils_validate_two_exprs()

Result< void > LMCAS::calculus_utils_detail::calculus_utils_validate_two_exprs ( const std::shared_ptr< SymbolicExpr > & first,
const std::shared_ptr< SymbolicExpr > & second,
const std::string & var,
ComputationContext & context,
const std::string & operation )

在文件 calculus_utils.cpp 第 27 行定义.

33{
34 auto step = context.consume_steps(1, operation);
35 if (!step) {
36 return step;
37 }
38 if (!first || !LMCAS::detail::node(first) || !second || !LMCAS::detail::node(second)) {
40 "expression cannot be null", operation);
41 }
42 if (var.empty()) {
44 "variable name cannot be empty", operation);
45 }
46 return Result<void>::success();
47}

引用了 calculus_utils_validate_two_exprs(), LMCAS::context, LMCAS::Result< T >::failure(), LMCAS::InvalidArgument, LMCAS::detail::node() , 以及 LMCAS::Result< T >::success().

被这些函数引用 calculus_utils_validate_two_exprs() , 以及 LMCAS::curvature_parametric_checked().

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

◆ is_infinity_node()

bool LMCAS::calculus_utils_detail::is_infinity_node ( const std::shared_ptr< const SymbolicNode > & node)
static

在文件 calculus_utils.cpp 第 86 行定义.

87{
88 auto function = std::dynamic_pointer_cast<const FunctionNode>(node);
90}
ExprResult function(const std::string &name, std::vector< ExprPtr > arguments)

引用了 LMCAS::function(), LMCAS::FunctionNode::Infinity , 以及 is_infinity_node().

被这些函数引用 calculus_utils_is_infinity() , 以及 is_infinity_node().

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