LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
inequality_solver_support.hpp
浏览该文件的文档.
2#pragma once
3
5#include "poly_utils.hpp"
6#include <memory>
7#include <optional>
8#include <string>
9#include <utility>
10#include <vector>
11
13
14Result<IntervalUnion> solve_exact_affine_inequality(
15 const Polynomial<Rational>& polynomial,
16 InequalityType type,
17 ComputationContext& context);
18
19Result<IntervalUnion> solve_exact_polynomial_inequality(
20 const Polynomial<Rational>& polynomial,
21 InequalityType type,
22 ComputationContext& context);
23
24std::optional<double> try_checked_numeric_constant(
25 const SymbolicExpr& expression, ComputationContext& context);
26int exact_numeric_sign(const std::shared_ptr<SymbolicExpr>& expression,
27 ComputationContext& context);
28int determine_leading_sign(const Polynomial<SymbolicPolyCoeff>& polynomial,
29 ComputationContext& context);
30
31std::vector<std::pair<std::shared_ptr<SymbolicExpr>, int>>
32find_roots_with_multiplicity(const std::shared_ptr<SymbolicExpr>& expression,
33 const std::string& variable, ComputationContext& context);
34
35bool root_less_than(const std::shared_ptr<SymbolicExpr>& lhs,
36 const std::shared_ptr<SymbolicExpr>& rhs, ComputationContext& context);
37bool roots_equal(const std::shared_ptr<SymbolicExpr>& lhs,
38 const std::shared_ptr<SymbolicExpr>& rhs, ComputationContext& context);
39
40bool depends_on_any_param(const std::shared_ptr<SymbolicExpr>& expression,
41 const std::vector<std::string>& parameters);
42
43std::vector<std::shared_ptr<SymbolicExpr>> solve_symbolic_poly(
44 const Polynomial<SymbolicPolyCoeff>& polynomial,
45 const std::string& variable, ComputationContext& context);
46
47void include_numeric_root(std::vector<Interval>& intervals,
48 const std::shared_ptr<SymbolicExpr>& root,
49 ComputationContext& context);
50IntervalUnion build_parametric_intervals(
51 const std::vector<std::shared_ptr<SymbolicExpr>>& roots,
52 const std::vector<int>& multiplicities, int leading_sign, InequalityType type, ComputationContext& context);
53
54}
不等式求解器 InequalitySolver,支持多项式,有理式,参数化不等式.
Result< IntervalUnion > solve_exact_polynomial_inequality(const Polynomial< Rational > &polynomial, InequalityType type, ComputationContext &context)
std::vector< std::pair< std::shared_ptr< SymbolicExpr >, int > > find_roots_with_multiplicity(const std::shared_ptr< SymbolicExpr > &expr, const std::string &variable, ComputationContext &context)
bool root_less_than(const std::shared_ptr< SymbolicExpr > &a, const std::shared_ptr< SymbolicExpr > &b, ComputationContext &context)
bool roots_equal(const std::shared_ptr< SymbolicExpr > &a, const std::shared_ptr< SymbolicExpr > &b, ComputationContext &context)
std::vector< std::shared_ptr< SymbolicExpr > > solve_symbolic_poly(const Polynomial< SymbolicPolyCoeff > &poly, const std::string &variable, ComputationContext &context)
int exact_numeric_sign(const std::shared_ptr< SymbolicExpr > &expr, ComputationContext &context)
void include_numeric_root(std::vector< Interval > &intervals, const std::shared_ptr< SymbolicExpr > &root, ComputationContext &context)
std::optional< double > try_checked_numeric_constant(const SymbolicExpr &expr, ComputationContext &context)
Result< IntervalUnion > solve_exact_affine_inequality(const Polynomial< Rational > &polynomial, InequalityType type, ComputationContext &context)
bool depends_on_any_param(const std::shared_ptr< SymbolicExpr > &expr, const std::vector< std::string > &parameters)
int determine_leading_sign(const Polynomial< SymbolicPolyCoeff > &poly, ComputationContext &context)
IntervalUnion build_parametric_intervals(const std::vector< std::shared_ptr< SymbolicExpr > > &symbolic_roots, const std::vector< int > &multiplicities, int leading_sign, InequalityType type, ComputationContext &context)
ExactRealAlgebraic rhs
const std::string & variable
std::size_t std::size_t ComputationContext & context
InequalityType
不等式类型
ExprSetResult roots(const ExprPtr &expression, const std::string &variable, ComputationContext &context, const SolveOptions &options)
多项式转换与精确符号多项式代数。