LMCAS
Lamina Computer Algebra System
Toggle main menu visibility
载入中...
搜索中...
未找到
expr_solving.cpp
浏览该文件的文档.
1
#include "
expr.hpp
"
2
3
#include <utility>
4
#include <vector>
5
6
#include "
internal/expr_internal.hpp
"
7
8
namespace
LMCAS
{
9
10
SolveResult
solve_set
(
const
ExprPtr
& equation,
11
const
std::string&
variable
,
12
ComputationContext
&
context
,
13
const
SolveOptions
&
options
) {
14
if
(!equation) {
15
return
SolveResult::failure
(
CasErrc::InvalidArgument
,
16
"equation cannot be null"
,
"LMCAS.solve_set"
);
17
}
18
if
(
variable
.empty()) {
19
return
SolveResult::failure
(
CasErrc::InvalidArgument
,
20
"solve variable cannot be empty"
,
21
"LMCAS.solve_set"
);
22
}
23
return
solve_equation
(equation,
variable
,
context
,
options
);
24
}
25
26
SolveResult
solve_set
(
const
ExprPtr
& equation,
27
const
std::string&
variable
,
28
const
SolveOptions
&
options
) {
29
ComputationContext
context
;
30
return
solve_set
(equation,
variable
,
context
,
options
);
31
}
32
33
static
ExprSetResult
project_finite_expr_set
(
const
ExprPtr
& original,
34
const
std::string&
variable
,
35
ComputationContext
&
context
,
36
const
SolveOptions
&
options
) {
37
auto
solved =
solve_set
(original,
variable
,
context
,
options
);
38
if
(!solved) {
39
return
ExprSetResult::failure
(solved.error());
40
}
41
42
const
auto
& solution_set = solved.value();
43
if
(std::holds_alternative<EmptySolutions>(solution_set)) {
44
return
expr_set
({});
45
}
46
const
auto
* finite = std::get_if<FiniteSolutions>(&solution_set);
47
if
(!finite) {
48
return
expr_set_failure
(
49
CasErrc::Inconclusive
,
50
"solution set is not a finite enumerable set<Expr>"
,
51
kSolveExprSetOperation
);
52
}
53
54
std::vector<ExprPtr> elements;
55
elements.reserve(finite->values.size());
56
for
(
const
auto
& solution : finite->values) {
57
if
(!solution.conditions.empty()) {
58
return
expr_set_failure
(
CasErrc::Inconclusive
,
59
"conditional finite solutions cannot be lowered to set<Expr>"
,
60
kSolveExprSetOperation
);
61
}
62
elements.push_back(solution.value);
63
}
64
return
expr_set
(std::move(elements));
65
}
66
67
ExprSetResult
solve_expr_set
(
const
ExprPtr
& equation,
68
const
std::string&
variable
,
69
ComputationContext
&
context
,
70
const
SolveOptions
&
options
) {
71
return
project_finite_expr_set
(equation,
variable
,
context
,
options
);
72
}
73
ExprSetResult
solve_expr_set
(
const
ExprPtr
& equation,
74
const
std::string&
variable
,
75
const
SolveOptions
&
options
) {
76
ComputationContext
context
;
77
return
solve_expr_set
(equation,
variable
,
context
,
options
);
78
}
79
80
ExprSetResult
roots
(
const
ExprPtr
& expression,
81
const
std::string&
variable
,
82
ComputationContext
&
context
,
83
const
SolveOptions
&
options
) {
84
return
project_finite_expr_set
(expression,
variable
,
context
,
options
);
85
}
86
87
ExprSetResult
roots
(
const
ExprPtr
& expression,
88
const
std::string&
variable
,
89
const
SolveOptions
&
options
) {
90
ComputationContext
context
;
91
return
roots
(expression,
variable
,
context
,
options
);
92
}
93
94
ExprSetResult
solve
(
const
ExprPtr
& equation,
95
const
std::string&
variable
,
96
ComputationContext
&
context
,
97
const
SolveOptions
&
options
) {
98
return
solve_expr_set
(equation,
variable
,
context
,
options
);
99
}
100
101
ExprSetResult
solve
(
const
ExprPtr
& equation,
102
const
std::string&
variable
,
103
const
SolveOptions
&
options
) {
104
ComputationContext
context
;
105
return
solve
(equation,
variable
,
context
,
options
);
106
}
107
108
}
LMCAS::ComputationContext
定义
computation_context.hpp:99
LMCAS::Result< SolutionSet >::failure
static Result failure(CasErrc code, std::string message, std::string operation={})
定义
result.hpp:52
expr.hpp
expr_internal.hpp
LMCAS
定义
assumption.hpp:11
LMCAS::variable
const std::string & variable
定义
expr.hpp:286
LMCAS::project_finite_expr_set
static ExprSetResult project_finite_expr_set(const ExprPtr &original, const std::string &variable, ComputationContext &context, const SolveOptions &options)
定义
expr_solving.cpp:33
LMCAS::context
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
定义
exact_factorization.hpp:65
LMCAS::SolveResult
Result< SolutionSet > SolveResult
定义
conditional_result.hpp:77
LMCAS::expr_set
ExprSetResult expr_set(std::vector< ExprPtr > elements)
定义
expr_sets.cpp:82
LMCAS::options
const std::string ComputationContext const SolveOptions & options
定义
expr.hpp:355
LMCAS::CasErrc::Inconclusive
@ Inconclusive
定义
result.hpp:24
LMCAS::CasErrc::InvalidArgument
@ InvalidArgument
定义
result.hpp:13
LMCAS::solve_expr_set
ExprSetResult solve_expr_set(const ExprPtr &equation, const std::string &variable, ComputationContext &context, const SolveOptions &options)
定义
expr_solving.cpp:67
LMCAS::solve_equation
LMCAS::SolveResult solve_equation(const std::shared_ptr< SymbolicExpr > &expr, const std::string &var, ComputationContext &context, const SolveOptions &opts)
定义
solve_visitor.cpp:456
LMCAS::kSolveExprSetOperation
constexpr const char * kSolveExprSetOperation
定义
expr_internal.hpp:15
LMCAS::ExprPtr
std::shared_ptr< SymbolicExpr > ExprPtr
定义
conditional_result.hpp:19
LMCAS::roots
ExprSetResult roots(const ExprPtr &expression, const std::string &variable, ComputationContext &context, const SolveOptions &options)
定义
expr_solving.cpp:80
LMCAS::ExprSetResult
Result< ExprSet > ExprSetResult
定义
expr.hpp:83
LMCAS::solve_set
SolveResult solve_set(const ExprPtr &equation, const std::string &variable, ComputationContext &context, const SolveOptions &options)
定义
expr_solving.cpp:10
LMCAS::solve
ExprSetResult solve(const ExprPtr &equation, const std::string &variable, ComputationContext &context, const SolveOptions &options)
定义
expr_solving.cpp:94
LMCAS::expr_set_failure
ExprSetResult expr_set_failure(CasErrc code, std::string message, const char *operation)
定义
expr_internal.hpp:18
LMCAS::SolveOptions
方程求解选项,控制数值求解行为和结果形式.
定义
solve_strategies.hpp:17
src
expr_solving.cpp
生成于
, 为 LMCAS使用
1.18.0