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

函数

int checked_dimension (const std::vector< FGLMPoly > &source_basis, size_t num_vars)
std::vector< Rational > coordinates (const FGLMPoly &polynomial, const std::map< Monomial, size_t > &index)
FGLMPoly dependent_polynomial (const Monomial &monomial, const std::vector< Rational > &combination, const std::vector< Monomial > &basis, const MonomialOrder &order, size_t num_vars)
void generate_standard_degree (Monomial &current, size_t variable, int remaining, const std::vector< Monomial > &leading, std::vector< Monomial > &standard)
std::vector< Monomial > standard_basis (const std::vector< FGLMPoly > &source_basis, size_t num_vars, int dimension)

函数说明

◆ checked_dimension()

int LMCAS::anonymous_namespace{fglm.cpp}::checked_dimension ( const std::vector< FGLMPoly > & source_basis,
size_t num_vars )

在文件 fglm.cpp 第 72 行定义.

72 {
73 if (!is_zero_dimensional(source_basis, num_vars)) {
74 throw std::runtime_error(
75 "FGLM: ideal is not zero-dimensional. "
76 "FGLM only works for zero-dimensional ideals.");
77 }
78 int dimension = quotient_dimension(source_basis, num_vars);
79 if (dimension <= 0 || dimension > 1000) {
80 throw std::runtime_error(
81 "FGLM: quotient dimension is too large or could not be determined. "
82 "dim = " + std::to_string(dimension));
83 }
84 return dimension;
85}
bool is_zero_dimensional(const std::vector< FGLMPoly > &basis, size_t num_vars)
int quotient_dimension(const std::vector< FGLMPoly > &basis, size_t num_vars, int max_degree)

引用了 checked_dimension(), LMCAS::is_zero_dimensional() , 以及 LMCAS::quotient_dimension().

被这些函数引用 checked_dimension().

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

◆ coordinates()

std::vector< Rational > LMCAS::anonymous_namespace{fglm.cpp}::coordinates ( const FGLMPoly & polynomial,
const std::map< Monomial, size_t > & index )

在文件 fglm.cpp 第 40 行定义.

41 {
42 std::vector<Rational> vector(index.size(), Rational(0));
43 for (const auto& [monomial, coefficient] : polynomial.terms) {
44 auto found = index.find(monomial);
45 if (found != index.end()) vector[found->second] = coefficient;
46 }
47 return vector;
48}

引用了 coordinates().

被这些函数引用 coordinates().

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

◆ dependent_polynomial()

FGLMPoly LMCAS::anonymous_namespace{fglm.cpp}::dependent_polynomial ( const Monomial & monomial,
const std::vector< Rational > & combination,
const std::vector< Monomial > & basis,
const MonomialOrder & order,
size_t num_vars )

在文件 fglm.cpp 第 50 行定义.

53 {
54 FGLMPoly result(num_vars);
55 result.add_term(monomial, Rational(1));
56 for (size_t index = 0; index < combination.size() && index < basis.size(); ++index) {
57 if (!combination[index].is_zero()) {
58 result.add_term(basis[index], -combination[index]);
59 }
60 }
61 result.sort_terms(order);
62 result.normalize();
63 if (!result.is_zero()) {
64 Rational leading = result.lead_coeff();
65 if (!(leading == Rational(1))) {
66 for (auto& term : result.terms) term.second = term.second / leading;
67 }
68 }
69 return result;
70}
const std::vector< FGLMPoly > const MonomialOrder & order
const std::vector< FGLMPoly > & basis

引用了 LMCAS::basis, dependent_polynomial() , 以及 LMCAS::order.

被这些函数引用 dependent_polynomial().

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

◆ generate_standard_degree()

void LMCAS::anonymous_namespace{fglm.cpp}::generate_standard_degree ( Monomial & current,
size_t variable,
int remaining,
const std::vector< Monomial > & leading,
std::vector< Monomial > & standard )

在文件 fglm.cpp 第 10 行定义.

12 {
13 if (variable == current.size() - 1) {
14 current[variable] = remaining;
15 if (is_standard(current, leading)) standard.push_back(current);
16 current[variable] = 0;
17 return;
18 }
19 for (int exponent = 0; exponent <= remaining; ++exponent) {
20 current[variable] = exponent;
21 generate_standard_degree(current, variable + 1, remaining - exponent,
22 leading, standard);
23 }
24 current[variable] = 0;
25}
void generate_standard_degree(Monomial &current, size_t variable, int remaining, const std::vector< Monomial > &leading, std::vector< Monomial > &standard)
bool is_standard(const Monomial &monomial, const std::vector< Monomial > &leading)
const std::string & variable
const ExprPtr & exponent

引用了 LMCAS::exponent, generate_standard_degree(), LMCAS::fglm_detail::is_standard() , 以及 LMCAS::variable.

被这些函数引用 generate_standard_degree() , 以及 standard_basis().

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

◆ standard_basis()

std::vector< Monomial > LMCAS::anonymous_namespace{fglm.cpp}::standard_basis ( const std::vector< FGLMPoly > & source_basis,
size_t num_vars,
int dimension )

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

28 {
29 auto leading = leading_monomials(source_basis);
30 std::vector<Monomial> standard;
31 for (int degree = 0;
32 degree <= dimension + 2 && static_cast<int>(standard.size()) < dimension;
33 ++degree) {
34 Monomial current(num_vars, 0);
35 generate_standard_degree(current, 0, degree, leading, standard);
36 }
37 return standard;
38}
std::vector< Monomial > leading_monomials(const std::vector< FGLMPoly > &basis)
std::vector< int > Monomial
单项式类型,以整数向量表示各变量的指数

引用了 generate_standard_degree(), LMCAS::fglm_detail::leading_monomials() , 以及 standard_basis().

被这些函数引用 standard_basis().

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