LMCAS
Lamina Computer Algebra System
Toggle main menu visibility
载入中...
搜索中...
未找到
solver_groebner_reconstruction.cpp
浏览该文件的文档.
1
#include "
internal/solver_groebner_internal.hpp
"
2
#include "
internal/symbolic_ast.hpp
"
3
4
namespace
LMCAS::groebner_detail
{
5
namespace
{
6
std::shared_ptr<const SymbolicNode>
variable_node
(
size_t
index,
const
PolyContext
&
context
) {
7
if
(index >=
context
.num_original_vars) {
8
auto
found =
context
.aux_to_node.find(index);
9
if
(found !=
context
.aux_to_node.end())
return
found->second;
10
}
11
return
SymbolicFactory::create_variable
(
context
.ext_vars[index]);
12
}
13
14
std::shared_ptr<const SymbolicNode>
term_node
(
const
Monomial
& monomial,
15
const
Rational& coefficient,
16
const
PolyContext
&
context
) {
17
std::vector<std::shared_ptr<const SymbolicNode>> factors;
18
if
(coefficient.get_denominator() == BigInt(1)) {
19
factors.push_back(
SymbolicFactory::create_number
(coefficient.get_numerator()));
20
}
else
{
21
factors.push_back(
SymbolicFactory::create_number
(coefficient));
22
}
23
for
(
size_t
index = 0; index < monomial.size() && index <
context
.ext_vars.size(); ++index) {
24
if
(monomial[index] <= 0)
continue
;
25
auto
variable
=
variable_node
(index,
context
);
26
if
(monomial[index] == 1) {
27
factors.push_back(
variable
);
28
}
else
{
29
factors.push_back(
SymbolicFactory::create_power
(
30
variable
,
SymbolicFactory::create_number
(BigInt(monomial[index]))));
31
}
32
}
33
if
(factors.size() == 1)
return
factors[0];
34
return
SymbolicFactory::create_multiply
(factors);
35
}
36
}
37
38
SymbolicExpr
from_poly_ext
(
39
const
Poly
& polynomial,
const
PolyContext
&
context
) {
40
if
(polynomial.
terms
.empty()) {
41
return
LMCAS::detail::expression_from_node
(
SymbolicFactory::create_number
(BigInt(0)));
42
}
43
std::vector<std::shared_ptr<const SymbolicNode>> terms;
44
for
(
const
auto
& [monomial, coefficient] : polynomial.
terms
) {
45
terms.push_back(term_node(monomial, coefficient,
context
));
46
}
47
if
(terms.size() == 1)
return
LMCAS::detail::expression_from_node
(terms[0]);
48
return
LMCAS::detail::expression_from_node
(
SymbolicFactory::create_add
(terms));
49
}
50
}
LMCAS::SymbolicFactory::create_add
static std::shared_ptr< const SymbolicNode > create_add(std::vector< std::shared_ptr< const SymbolicNode > > ops, detail::RewriteBudget *budget=nullptr)
创建加法节点,自动扁平化嵌套加法并消除零项.
定义
symbolic_factory.cpp:12
LMCAS::SymbolicFactory::create_variable
static std::shared_ptr< const SymbolicNode > create_variable(const std::string &name)
定义
symbolic_factory.cpp:10
LMCAS::SymbolicFactory::create_power
static std::shared_ptr< const SymbolicNode > create_power(std::shared_ptr< const SymbolicNode > base, std::shared_ptr< const SymbolicNode > exponent)
创建幂运算节点,自动处理指数为 0/1 及底数为 0/1 的情况.
定义
symbolic_factory.cpp:139
LMCAS::SymbolicFactory::create_multiply
static std::shared_ptr< const SymbolicNode > create_multiply(std::vector< std::shared_ptr< const SymbolicNode > > ops, detail::RewriteBudget *budget=nullptr)
创建乘法节点,自动扁平化嵌套乘法并消除单位元.
定义
symbolic_factory.cpp:83
LMCAS::SymbolicFactory::create_number
static std::shared_ptr< const SymbolicNode > create_number(const ::LMCAS::BigInt &v)
定义
symbolic_factory.cpp:7
LMCAS::detail::expression_from_node
inline ::LMCAS::SymbolicExpr expression_from_node(SymbolicNodePtr root)
定义
base.hpp:107
LMCAS::groebner_detail::anonymous_namespace{solver_groebner_reconstruction.cpp}::variable_node
std::shared_ptr< const SymbolicNode > variable_node(size_t index, const PolyContext &context)
定义
solver_groebner_reconstruction.cpp:6
LMCAS::groebner_detail::anonymous_namespace{solver_groebner_reconstruction.cpp}::term_node
std::shared_ptr< const SymbolicNode > term_node(const Monomial &monomial, const Rational &coefficient, const PolyContext &context)
定义
solver_groebner_reconstruction.cpp:14
LMCAS::groebner_detail
定义
solver_groebner_builder.hpp:6
LMCAS::groebner_detail::from_poly_ext
SymbolicExpr from_poly_ext(const Poly &polynomial, const PolyContext &context)
定义
solver_groebner_reconstruction.cpp:38
LMCAS::groebner_detail::Monomial
std::vector< int > Monomial
定义
solver_groebner_internal.hpp:16
LMCAS::variable
const std::string & variable
定义
expr.hpp:286
LMCAS::context
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
定义
exact_factorization.hpp:65
solver_groebner_internal.hpp
LMCAS::groebner_detail::PolyContext
定义
solver_groebner_internal.hpp:42
LMCAS::groebner_detail::Poly
定义
solver_groebner_internal.hpp:28
LMCAS::groebner_detail::Poly::terms
PolyTerms terms
定义
solver_groebner_internal.hpp:29
symbolic_ast.hpp
内部 AST 定义。
src
solver_groebner_reconstruction.cpp
生成于
, 为 LMCAS使用
1.18.0