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

函数

int integration_by_parts_choice (const std::vector< std::shared_ptr< const SymbolicNode > > &ops, const std::string &var)
int integration_by_parts_score (const std::shared_ptr< const SymbolicNode > &node, const std::string &var)
std::shared_ptr< SymbolicExpr > integration_differential_factor (const std::vector< std::shared_ptr< const SymbolicNode > > &ops, int best_u_idx)

函数说明

◆ integration_by_parts_choice()

int LMCAS::anonymous_namespace{integration_by_parts.cpp}::integration_by_parts_choice ( const std::vector< std::shared_ptr< const SymbolicNode > > & ops,
const std::string & var )

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

28 {
29 int best_u_idx = -1;
30 int best_score = 10;
31 if (ops.size() == 1) {
32 int s = integration_by_parts_score(ops[0], var);
33 if (s <= 2) best_u_idx = 0;
34 } else {
35 for (size_t i = 0; i < ops.size(); ++i) {
37 int s = integration_by_parts_score(ops[i], var);
38 if (s < best_score) {
39 best_score = s;
40 best_u_idx = (int)i;
41 }
42 }
43 }
44 return best_u_idx;
45}
int integration_by_parts_score(const std::shared_ptr< const SymbolicNode > &node, const std::string &var)
inline ::LMCAS::SymbolicExpr expression_from_node(SymbolicNodePtr root)
bool depends_on_integration_variable(const SymbolicExpr &expression, const std::string &variable)

引用了 LMCAS::depends_on_integration_variable(), LMCAS::detail::expression_from_node(), integration_by_parts_choice() , 以及 integration_by_parts_score().

被这些函数引用 integration_by_parts_choice().

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

◆ integration_by_parts_score()

int LMCAS::anonymous_namespace{integration_by_parts.cpp}::integration_by_parts_score ( const std::shared_ptr< const SymbolicNode > & node,
const std::string & var )

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

8 {
10 if (auto fn = std::dynamic_pointer_cast<const FunctionNode>(node)) {
11 if (fn->type() == FunctionNode::FuncType::Ln || fn->type() == FunctionNode::FuncType::Log) { return 1; }
12 if (fn->type() == FunctionNode::FuncType::ArcSin || fn->type() == FunctionNode::FuncType::ArcTan) { return 2; }
13 if (fn->type() == FunctionNode::FuncType::Sin || fn->type() == FunctionNode::FuncType::Cos) { return 4; }
14 if (fn->type() == FunctionNode::FuncType::Exp) { return 5; }
15 }
16 if (!depends_on_integration_variable(e, var)) { return 10; }
17 if (std::dynamic_pointer_cast<const VariableNode>(node)) { return 3; }
18 if (const auto* power = dynamic_cast<const PowerNode*>(node.get())) {
19 const auto exponent = detail::exact_rational_value(power->exponent());
20 const auto* base = dynamic_cast<const VariableNode*>(power->base().get());
21 if (base && base->name() == var && exponent &&
22 exponent->is_integer() && *exponent > Rational(0)) { return 3; }
23 }
24 return 10;
25}
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
std::optional< Rational > exact_rational_value(const NumberNode &number)
ExprResult e()
@ Rational
Rational numbers
const ExprPtr & exponent

引用了 LMCAS::FunctionNode::ArcSin, LMCAS::FunctionNode::ArcTan, LMCAS::FunctionNode::Cos, LMCAS::depends_on_integration_variable(), LMCAS::e(), LMCAS::detail::exact_rational_value(), LMCAS::FunctionNode::Exp, LMCAS::exponent, LMCAS::detail::expression_from_node(), integration_by_parts_score(), LMCAS::FunctionNode::Ln, LMCAS::FunctionNode::Log , 以及 LMCAS::FunctionNode::Sin.

被这些函数引用 integration_by_parts_choice() , 以及 integration_by_parts_score().

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

◆ integration_differential_factor()

std::shared_ptr< SymbolicExpr > LMCAS::anonymous_namespace{integration_by_parts.cpp}::integration_differential_factor ( const std::vector< std::shared_ptr< const SymbolicNode > > & ops,
int best_u_idx )

在文件 integration_by_parts.cpp 第 47 行定义.

48 {
49 std::vector<std::shared_ptr<const SymbolicNode>> dv_ops;
50 for (size_t i = 0; i < ops.size(); ++i) {
51 if ((int)i != best_u_idx) {
52 dv_ops.push_back(ops[i]);
53 }
54 }
55 if (dv_ops.empty()) {
56 return SymbolicExpr::number(1);
57 }
58 if (dv_ops.size() == 1) {
60 }
62}
std::shared_ptr<::LMCAS::SymbolicExpr > make_expression_ptr(SymbolicNodePtr root)
std::shared_ptr< const Node > make_node(Args &&... args)

引用了 LMCAS::detail::expression_from_node(), integration_differential_factor(), LMCAS::detail::make_expression_ptr() , 以及 LMCAS::detail::make_node().

被这些函数引用 integration_differential_factor().

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