LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
solver_groebner_builder.hpp
浏览该文件的文档.
1#pragma once
2
5
7
9 std::vector<std::string> vars;
10
11 std::vector<std::string>& ext_vars;
12
13 std::unordered_map<std::string, size_t>& transcendental_map;
14
15 std::unordered_map<size_t, std::shared_ptr<const SymbolicNode>>* aux_to_node;
18
19 size_t get_or_create_aux_var(const std::shared_ptr<const SymbolicNode>& node);
20
21 void represent_as_aux_or_fail(const std::shared_ptr<const SymbolicNode>& node);
22
23 bool use_numeric_function(const FunctionNode& node);
24 bool function_depends_on_variables(const FunctionNode& node) const;
25
26 public:
27
28 PolyBuilder(const std::vector<std::string>& v, PolyContext& ctx, bool strict = false);
29
30
31 PolyBuilder(const std::vector<std::string>& v,
32 std::vector<std::string>& ext_v,
33 std::unordered_map<std::string, size_t>& trans_map,
34 std::unordered_map<size_t, std::shared_ptr<const SymbolicNode>>* aux_map,
35 detail::RewriteBudget& budget, bool strict = false)
36 : SymbolicVisitor(&budget), vars(v), ext_vars(ext_v),
37 transcendental_map(trans_map), aux_to_node(aux_map),
38 result(ext_v.size()), strict_mode(strict) {}
39
40 Poly get_result() const { return result; }
41 bool failed = false;
42
43 void visit(const NumberNode& node) override;
44
45 void visit(const VariableNode& node) override;
46
47 void visit(const AddNode& node) override;
48
49 void visit(const MultiplyNode& node) override;
50
51 void visit(const PowerNode& node) override;
52
53 void visit(const FunctionNode& node) override;
54 void visit(const UninterpretedFunctionNode& node) override;
55
56 void visit(const MatrixNode& node) override;
57 void visit(const RelationalNode& node) override;
58 void visit(const LogicalNode& node) override;
59 void visit(const PiecewiseNode& node) override;
60 void visit(const SummationNode& node) override;
61 void visit(const ProductNode& node) override;
62 void visit(const TransformNode& node) override;
63 void visit(const QuantifierNode& node) override;
64 void visit(const SetBuilderNode& node) override;
65 void visit(const ComplexNode& node) override;
66 void visit(const FiniteSetNode& node) override;
67 void visit(const IntervalNode& node) override;
68 void visit(const MembershipNode& node) override;
69 void visit(const QuantityNode& node) override;
70 void visit(const IntegralNode& node) override;
71 void visit(const LimitNode& node) override;
72 void visit(const RootOfNode& node) override;
73 };
74
75}
加法节点,表示多个操作数的求和。
复数节点,表示 real + imag * i。
函数节点,表示数学函数调用(三角函数、对数、特殊函数等)。
矩阵节点,支持稠密和稀疏两种存储方式。
乘法节点,表示多个操作数的乘积。
分段函数节点,表示条件分支表达式.
幂运算节点,表示 base^exponent。
连乘节点,表示符号有限/无限连乘 prod_{k=a}^{b} f(k).
求和节点,表示符号有限/无限求和 sum_{k=a}^{b} f(k).
积分变换节点,表示 Laplace,Fourier,Z 变换及其逆变换.
变量节点,表示一个符号变量。
bool function_depends_on_variables(const FunctionNode &node) const
size_t get_or_create_aux_var(const std::shared_ptr< const SymbolicNode > &node)
PolyBuilder(const std::vector< std::string > &v, PolyContext &ctx, bool strict=false)
std::unordered_map< std::string, size_t > & transcendental_map
std::unordered_map< size_t, std::shared_ptr< const SymbolicNode > > * aux_to_node
void visit(const NumberNode &node) override
PolyBuilder(const std::vector< std::string > &v, std::vector< std::string > &ext_v, std::unordered_map< std::string, size_t > &trans_map, std::unordered_map< size_t, std::shared_ptr< const SymbolicNode > > *aux_map, detail::RewriteBudget &budget, bool strict=false)
void represent_as_aux_or_fail(const std::shared_ptr< const SymbolicNode > &node)
__attribute__((visibility("default"))) VectorCalculusExprResult surface_integral_scalar_checked(const std __attribute__((visibility("default"))) VectorCalculusExprResult surface_integral_scalar_checked(const std __attribute__((visibility("default"))) std const VectorField const std::string const std::string & v
内部 AST 定义。