LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
fglm_internal.hpp
浏览该文件的文档.
1#pragma once
2
3#include "fglm.hpp"
4#include <set>
5#include <vector>
6
7namespace LMCAS::fglm_detail {
9public:
10 MonomialEnumerator(size_t num_vars, const MonomialOrder& order, int max_degree);
11 bool next(Monomial& out);
12
13private:
14 struct HeapCmp {
16 bool operator()(const Monomial& a, const Monomial& b) const {
17 return (*order)(a, b);
18 }
19 };
20
21 size_t num_vars_;
24 std::vector<Monomial> heap_;
25 std::set<Monomial> visited_;
27
28 void push(const Monomial& monomial);
29};
31public:
32 bool add_vector(const std::vector<Rational>& vector,
33 std::vector<Rational>& combination);
34
35private:
36 std::vector<std::vector<Rational>> rows_;
37 std::vector<size_t> pivots_;
38 std::vector<std::vector<Rational>> combinations_;
39 size_t basis_count_ = 0;
40};
41
42bool is_standard(const Monomial& monomial, const std::vector<Monomial>& leading);
43bool has_pure_generators(const std::vector<Monomial>& leading, size_t num_vars);
44std::vector<Monomial> leading_monomials(const std::vector<FGLMPoly>& basis);
45void generate_degree(Monomial& current, size_t variable, int remaining,
46 std::vector<Monomial>& monomials);
47
48}
单项式序比较器,支持 Lex、GrevLex、DegLex、DegRevLex
std::vector< std::vector< Rational > > rows_
bool add_vector(const std::vector< Rational > &vector, std::vector< Rational > &combination)
std::vector< std::vector< Rational > > combinations_
void push(const Monomial &monomial)
MonomialEnumerator(size_t num_vars, const MonomialOrder &order, int max_degree)
FGLM 算法:零维理想 Gröbner 基在不同单项式序之间的转换.
void generate_degree(Monomial &current, size_t variable, int remaining, std::vector< Monomial > &monomials)
std::vector< Monomial > leading_monomials(const std::vector< FGLMPoly > &basis)
bool is_standard(const Monomial &monomial, const std::vector< Monomial > &leading)
bool has_pure_generators(const std::vector< Monomial > &leading, size_t num_vars)
const std::string & variable
std::vector< int > Monomial
单项式类型,以整数向量表示各变量的指数
const std::vector< FGLMPoly > const MonomialOrder & order
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
const std::vector< FGLMPoly > & basis
bool operator()(const Monomial &a, const Monomial &b) const