LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
parametric_solver.hpp
浏览该文件的文档.
1/**
2 * @file parametric_solver.hpp
3 * @brief 含参方程组求解器 ParametricSolver,支持分段解。
4 */
5#pragma once
6#include "symbolic.hpp"
7#include <vector>
8#include <map>
9#include <string>
10#include <memory>
11
12namespace LMCAS {
13
14/** @brief 含参方程组的分段解,按参数条件分类 */
16 /** @brief 单个分段:参数条件及对应的解集 */
17 struct Case {
18 std::shared_ptr<SymbolicExpr> condition; ///< 参数满足的条件表达式
19 std::vector<std::map<std::string, std::shared_ptr<SymbolicExpr>>> solutions; ///< 该条件下的解集
20 };
21 std::vector<Case> cases; ///< 所有分段
22};
23
25 std::vector<std::map<std::string, std::shared_ptr<SymbolicExpr>>>;
27
28/** @brief 含参方程组求解器,支持线性与多项式方程组的参数化求解 */
29class LMCAS_API ParametricSolver {
30public:
31
32 /**
33 * @brief 求解含参方程组,返回所有解
34 * @param equations 方程列表(每个表达式 = 0)
35 * @param unknowns 未知数名称列表
36 * @param parameters 参数名称列表
37 * @return 解的列表,每个解为变量名到表达式的映射
38 */
39 static std::vector<std::map<std::string, std::shared_ptr<SymbolicExpr>>>
40 solve_system(
41 const std::vector<std::shared_ptr<SymbolicExpr>>& equations,
42 const std::vector<std::string>& unknowns,
43 const std::vector<std::string>& parameters);
44
45 /**
46 * @brief 求解含参方程组,返回按参数条件分段的解
47 * @param equations 方程列表(每个表达式 = 0)
48 * @param unknowns 未知数名称列表
49 * @param parameters 参数名称列表
50 * @return 分段解集
51 */
52 static PiecewiseSolution solve_system_piecewise(
53 const std::vector<std::shared_ptr<SymbolicExpr>>& equations,
54 const std::vector<std::string>& unknowns,
55 const std::vector<std::string>& parameters);
56
57 static ParametricSolutionsResult solve_polynomial_parametric_checked(
58 const std::vector<std::shared_ptr<SymbolicExpr>>& equations,
59 const std::vector<std::string>& unknowns,
60 const std::vector<std::string>& parameters,
62
63 static ParametricSolutionsResult solve_polynomial_parametric_checked(
64 const std::vector<std::shared_ptr<SymbolicExpr>>& equations,
65 const std::vector<std::string>& unknowns,
66 const std::vector<std::string>& parameters);
67
68private:
69
70 /** @brief 求解关于未知数为线性的含参方程组 */
71 static std::vector<std::map<std::string, std::shared_ptr<SymbolicExpr>>>
72 solve_linear_parametric(
73 const std::vector<std::shared_ptr<SymbolicExpr>>& equations,
74 const std::vector<std::string>& unknowns,
76
77 /** @brief 求解关于未知数为多项式的含参方程组 */
78 static ParametricSolutionsResult solve_polynomial_parametric_impl(
79 const std::vector<std::shared_ptr<SymbolicExpr>>& equations,
80 const std::vector<std::string>& unknowns,
81 const std::vector<std::string>& parameters,
83
84 /**
85 * @brief 判断方程组是否关于未知数为线性
86 * @param equations 方程列表
87 * @param unknowns 未知数名称列表
88 * @return 线性返回 true
89 */
90 static bool is_linear_in_unknowns(
91 const std::vector<std::shared_ptr<SymbolicExpr>>& equations,
92 const std::vector<std::string>& unknowns, ComputationContext& context);
93};
94
95}
#define LMCAS_API
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
Result< ParametricSolutionList > ParametricSolutionsResult
std::vector< std::map< std::string, std::shared_ptr< SymbolicExpr > > > ParametricSolutionList
std::vector< Case > cases
所有分段
含参方程组的分段解,按参数条件分类
单个分段:参数条件及对应的解集
std::shared_ptr< SymbolicExpr > condition
参数满足的条件表达式
std::vector< std::map< std::string, std::shared_ptr< SymbolicExpr > > > solutions
该条件下的解集
符号表达式主类 SymbolicExpr 及其工厂方法,运算接口.