28 std::shared_ptr<SymbolicExpr> condition;
29 IntervalUnion solution;
31 std::vector<Case> cases;
37 bool is_empty()
const {
return cases.empty(); }
43 bool is_single()
const {
return cases.size() == 1; }
52 IntervalUnion single_solution()
const {
53 if (!is_single())
return IntervalUnion::empty();
54 return cases[0].solution;
66 static Result<IntervalUnion> solve_inequality_checked(
67 const std::shared_ptr<SymbolicExpr>& expr,
69 const std::string& variable,
70 ComputationContext& context);
72 static Result<IntervalUnion> solve_inequality_checked(
73 const std::shared_ptr<SymbolicExpr>& expr,
75 const std::string& variable);
84 static Result<IntervalUnion> solve_inequalities_checked(
85 const std::vector<std::pair<std::shared_ptr<SymbolicExpr>,
86 InequalityType>>& inequalities,
87 const std::string& variable,
88 ComputationContext& context);
90 static Result<IntervalUnion> solve_inequalities_checked(
91 const std::vector<std::pair<std::shared_ptr<SymbolicExpr>,
92 InequalityType>>& inequalities,
93 const std::string& variable);
109 static IntervalUnion solve_inequality(
110 const std::shared_ptr<SymbolicExpr>& expr,
112 const std::string& variable);
120 static IntervalUnion solve_inequalities(
121 const std::vector<std::pair<std::shared_ptr<SymbolicExpr>,
122 InequalityType>>& inequalities,
123 const std::string& variable);
133 static IntervalUnion solve_rational_inequality(
134 const std::shared_ptr<SymbolicExpr>& numerator,
135 const std::shared_ptr<SymbolicExpr>& denominator,
137 const std::string& variable);
143 static Result<PiecewiseIntervalResult> solve_parametric_inequality_checked(
144 const std::shared_ptr<SymbolicExpr>& expr,
146 const std::string& variable,
147 const std::vector<std::string>& parameters,
148 ComputationContext& context);
150 static Result<PiecewiseIntervalResult> solve_parametric_inequality_checked(
151 const std::shared_ptr<SymbolicExpr>& expr,
153 const std::string& variable,
154 const std::vector<std::string>& parameters);
157 static IntervalUnion solve_inequality_impl(
158 const std::shared_ptr<SymbolicExpr>& expr,
160 const std::string& variable,
161 ComputationContext& context);
164 static Result<IntervalUnion> solve_exact_quadratic_inequality(
165 const Polynomial<Rational>& polynomial,
167 ComputationContext& context);
169 static std::vector<SignChartEntry> build_sign_chart(
170 const std::shared_ptr<SymbolicExpr>& poly,
171 const std::string& variable,
172 const std::vector<std::shared_ptr<SymbolicExpr>>& roots,
173 const std::vector<int>& multiplicities,
174 ComputationContext& context);
176 static IntervalUnion select_intervals(
177 const std::vector<SignChartEntry>& chart,
179 const std::vector<std::shared_ptr<SymbolicExpr>>& roots,
180 const std::vector<int>& multiplicities,
181 ComputationContext& context);
183 static IntervalUnion build_parametric_solution(
184 const std::vector<std::shared_ptr<SymbolicExpr>>& symbolic_roots,
185 const std::vector<int>& multiplicities,
187 InequalityType type);
区间与区间并集 IntervalUnion,用于不等式解集表示。
int sign
该区间上表达式的符号(+1, 0, -1)
一元多项式模板类 Polynomial<T>,支持四则运算,GCD,求导,求值.
符号表达式主类 SymbolicExpr 及其工厂方法,运算接口.