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

函数

static bool is_poly_expr_node (const std::shared_ptr< const SymbolicNode > &node)
static std::optional< int > polynomial_exponent (const std::shared_ptr< const SymbolicNode > &node)
 多元因式分解辅助函数

函数说明

◆ is_poly_expr_node()

bool LMCAS::anonymous_namespace{symbolic_factor.cpp}::is_poly_expr_node ( const std::shared_ptr< const SymbolicNode > & node)
static

在文件 symbolic_factor.cpp 第 42 行定义.

42 {
43 if (!node) { return false; }
44 if (std::dynamic_pointer_cast<const NumberNode>(node)) { return true; }
45 if (auto variable = std::dynamic_pointer_cast<const VariableNode>(node)) {
46 return !variable->is_constant();
47 }
48
49 if (auto add = std::dynamic_pointer_cast<const AddNode>(node)) {
50 for (const auto& op : add->operands()) {
51 if (!is_poly_expr_node(op)) { return false; }
52 }
53 return true;
54 }
55
56 if (auto mul = std::dynamic_pointer_cast<const MultiplyNode>(node)) {
57 for (const auto& op : mul->operands()) {
58 if (!is_poly_expr_node(op)) { return false; }
59 }
60 return true;
61 }
62
63 if (auto pow = std::dynamic_pointer_cast<const PowerNode>(node)) {
64 return polynomial_exponent(pow->exponent()).has_value() &&
65 is_poly_expr_node(pow->base());
66 }
67
68 return false;
69}
static std::optional< int > polynomial_exponent(const std::shared_ptr< const SymbolicNode > &node)
多元因式分解辅助函数
static bool is_poly_expr_node(const std::shared_ptr< const SymbolicNode > &node)
ExprResult pow(const ExprPtr &base, const ExprPtr &exponent, ComputationContext &context)
const std::string & variable
ExprResult mul(const ExprPtr &lhs, const ExprPtr &rhs, ComputationContext &context)
ExprResult add(const ExprPtr &lhs, const ExprPtr &rhs, ComputationContext &context)
const ExprPtr RelationOp op

引用了 LMCAS::add(), is_poly_expr_node(), LMCAS::mul(), LMCAS::op, polynomial_exponent(), LMCAS::pow() , 以及 LMCAS::variable.

被这些函数引用 is_poly_expr_node().

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

◆ polynomial_exponent()

std::optional< int > LMCAS::anonymous_namespace{symbolic_factor.cpp}::polynomial_exponent ( const std::shared_ptr< const SymbolicNode > & node)
static

多元因式分解辅助函数

在文件 symbolic_factor.cpp 第 26 行定义.

27 {
28 auto number = std::dynamic_pointer_cast<const NumberNode>(node);
29 if (!number) { return std::nullopt; }
30 BigInt exponent;
31 if (std::holds_alternative<BigInt>(number->value())) {
32 exponent = std::get<BigInt>(number->value());
33 } else {
34 const auto& rational = std::get<Rational>(number->value());
35 if (!rational.is_integer()) { return std::nullopt; }
36 exponent = rational.to_bigint();
37 }
38 if (exponent.is_negative() || exponent > BigInt(100)) { return std::nullopt; }
39 return static_cast<int>(exponent.try_to_int64().value());
40}
const ExprPtr & exponent
const std::string const ExprPtr & value
ExprResult rational(const Rational &value)

引用了 LMCAS::exponent, polynomial_exponent(), LMCAS::rational() , 以及 LMCAS::value.

被这些函数引用 is_poly_expr_node() , 以及 polynomial_exponent().

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