LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
solver.hpp
浏览该文件的文档.
1/**
2 * @file solver.hpp
3 * @brief 多项式方程组求解器 Solver,包含 Gröbner 基、线性系统求解。
4 */
5#pragma once
6#include "symbolic.hpp"
7#include <vector>
8#include <string>
9#include <map>
10
11// Forward declaration for assumption-aware solving
12namespace LMCAS {
13class AssumptionContext;
14}
15
16namespace LMCAS {
17
18/** @brief 多项式方程组求解器,提供线性系统求解、Gröbner 基计算及多项式系统求解功能。 */
21class LMCAS_API Solver {
22public:
23
24 /**
25 * @brief 求解线性方程组。
26 * @param equations 方程列表(每个方程视为等于零的表达式)
27 * @param variables 待求解的变量名列表
28 * @return 变量名到解表达式的映射
29 */
30 static std::map<std::string, SymbolicExpr> solve_linear_system(
31 const std::vector<SymbolicExpr>& equations,
32 const std::vector<std::string>& variables);
33
34 /**
35 * @brief 计算多项式集合的 Gröbner 基。
36 * @param polynomials 输入多项式列表
37 * @param variables 变量名列表(决定单项式序)
38 * @return Gröbner 基多项式列表
39 */
40 static std::vector<SymbolicExpr> groebner_basis(
41 const std::vector<SymbolicExpr>& polynomials,
42 const std::vector<std::string>& variables);
43
44 /**
45 * @brief 求解多项式方程组,显式报告失败。
46 */
47 static PolynomialSystemResult solve_polynomial_system_checked(
48 const std::vector<SymbolicExpr>& equations,
49 const std::vector<std::string>& variables,
51
52 static PolynomialSystemResult solve_polynomial_system_checked(
53 const std::vector<SymbolicExpr>& equations,
54 const std::vector<std::string>& variables);
55
56 /**
57 * @brief 计算约化 Gröbner 基。
58 * @param polynomials 输入多项式列表
59 * @param variables 变量名列表
60 * @return 约化 Gröbner 基多项式列表
61 */
62 static std::vector<SymbolicExpr> reduced_groebner_basis(
63 const std::vector<SymbolicExpr>& polynomials,
64 const std::vector<std::string>& variables);
65
66 /**
67 * @brief 判断多项式是否属于给定 Gröbner 基生成的理想。
68 * @param polynomial 待检测的多项式
69 * @param basis Gröbner 基
70 * @param variables 变量名列表
71 * @return 若多项式属于该理想则返回 true
72 */
73 static bool ideal_membership(
74 const SymbolicExpr& polynomial,
75 const std::vector<SymbolicExpr>& basis,
76 const std::vector<std::string>& variables);
77
78 /**
79 * @brief 计算消元理想,消去前 elim_count 个变量。
80 * @param basis Gröbner 基
81 * @param variables 变量名列表(前 elim_count 个将被消去)
82 * @param elim_count 要消去的变量数量
83 * @return 消元理想的生成元列表
84 */
85 static std::vector<SymbolicExpr> elimination_ideal(
86 const std::vector<SymbolicExpr>& basis,
87 const std::vector<std::string>& variables,
88 int elim_count);
89};
90
93
94/**
95 * @brief Solve an equation with assumption-based domain filtering.
96 *
97 * Computes all solutions and applies the optional assumption context's domain
98 * and sign constraints. The computation context is shared with nested solving.
99 */
101 const std::shared_ptr<SymbolicExpr>& equation,
102 const std::string& variable,
103 const AssumptionContext* assumptions,
105
107 const std::shared_ptr<SymbolicExpr>& equation,
108 const std::string& variable,
109 const AssumptionContext* assumptions = nullptr);
110
111}
#define LMCAS_API
const std::string & variable
Result< std::vector< std::shared_ptr< SymbolicExpr > > > AssumptionSolveResult
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
AssumptionSolveResult solve_with_assumptions_checked(const std::shared_ptr< SymbolicExpr > &equation, const std::string &variable, const AssumptionContext *assumptions, ComputationContext &context)
Result< std::vector< std::map< std::string, SymbolicExpr > > > PolynomialSystemResult
多项式方程组求解器,提供线性系统求解、Gröbner 基计算及多项式系统求解功能。
const std::vector< FGLMPoly > & basis
符号表达式主类 SymbolicExpr 及其工厂方法,运算接口.