54 bool empty()
const noexcept {
return elements_.empty(); }
55 std::size_t size()
const noexcept {
return elements_.size(); }
57 const std::vector<ConstExprPtr>& elements()
const noexcept {
return elements_; }
58 const ConstExprPtr& expression()
const noexcept {
return expression_; }
60 bool contains(
const SymbolicExpr& expression)
const;
61 bool subset_of(
const ExprSet& other)
const;
63 ExprSet set_union(
const ExprSet& other)
const;
64 ExprSet intersection(
const ExprSet& other)
const;
65 ExprSet difference(
const ExprSet& other)
const;
66 ExprSet symmetric_difference(
const ExprSet& other)
const;
71 const ExprSet&,
const ExprSet&);
73 const ExprSet&,
const ExprSet&);
75 const ExprSet&,
const ExprSet&);
77 const ExprSet&,
const ExprSet&);
79 std::vector<ConstExprPtr> elements_;
95 explicit NumberDomainSet(NumberDomain domain) : domain_(domain) {}
98 const char*
name() const noexcept;
99 bool subset_of(const NumberDomainSet& other) const noexcept;
101 Result<
bool> contains(const ConstExprPtr& element) const;
104 NumberDomain domain_;
112LMCAS_API std::optional<std::string_view> symbol_name(
113 const ExprPtr& expression) noexcept;
116LMCAS_API std::optional<RelationOp> relation_op(
117 const ExprPtr& expression) noexcept;
119LMCAS_API ExprResult sym(const std::
string& name);
120LMCAS_API ExprResult parse_expr(const std::
string& source);
121LMCAS_API ExprResult parse_expr(const std::
string& source,
122 ComputationContext& context);
124LMCAS_API Result<std::
string> serialize_expr(const ExprPtr& expression,
125 ComputationContext& context);
126LMCAS_API Result<std::
string> serialize_expr(const ExprPtr& expression);
127LMCAS_API ExprResult parse_serialized_expr(const std::
string& source,
128 ComputationContext& context);
129LMCAS_API ExprResult parse_serialized_expr(const std::
string& source);
131LMCAS_API ExprResult integer(const BigInt& value);
132template <typename Integer,
133 std::enable_if_t<std::is_integral_v<Integer> &&
134 !std::is_same_v<Integer,
int>,
int> = 0>
146 std::vector<
ExprPtr> arguments);
170 const std::
string&
unit,
323 const std::vector<std::
string>&
wildcards);
345LMCAS_API Result<ApproxComplex> eval_complex(
const SymbolicExpr& expression,
346 const NumericBindings& bindings,
347 ComputationContext& context);
349LMCAS_API Result<ApproxComplex> eval_complex(
const SymbolicExpr& expression,
350 const NumericBindings& bindings = {});
353 const std::string& variable,
354 ComputationContext& context,
357LMCAS_API SolveResult solve_set(
const ExprPtr& equation,
358 const std::string& variable,
359 const SolveOptions& options = {});
370 const NumberDomainSet&
rhs);
393LMCAS_API ExprSetResult solve_expr_set(
const ExprPtr& equation,
394 const std::string& variable,
395 const SolveOptions& options = {});
398 const std::string& variable,
399 ComputationContext& context,
400 const SolveOptions& options = {});
403 const std::string& variable,
404 const SolveOptions& options = {});
407 const std::string& variable,
408 ComputationContext& context,
409 const SolveOptions& options = {});
412 const std::string& variable,
413 const SolveOptions& options = {});
419 const SymbolicExpr& rhs);
422 const SymbolicExpr& rhs,
423 ComputationContext& context,
424 const EqvOptions& options = {});
任意精度整数 BigInt,底层调用 LMMP 实现高性能大数运算。
Result< ApproxReal > evalf(const SymbolicExpr &expression, const NumericBindings &bindings, ComputationContext &context)
ExprResult strip_to_display_value(const ExprPtr &quantity, ComputationContext &context)
ExprResult pow(const ExprPtr &base, const ExprPtr &exponent, ComputationContext &context)
const std::string & variable
ExprResult eq(const ExprPtr &lhs, const ExprPtr &rhs, ComputationContext &context)
ExprResult le(const ExprPtr &lhs, const ExprPtr &rhs)
ExprResult exp(const ExprPtr &expression, ComputationContext &context)
ExprResult with_unit(const ExprPtr &value, const std::string &unit, ComputationContext &context)
ExprResult imaginary_unit()
ExprResult logical_or(const ExprPtr &lhs, const ExprPtr &rhs)
ExprResult log10(const ExprPtr &expression, ComputationContext &context)
__attribute__((visibility("default"))) ExprResult function(const std __attribute__((visibility("default"))) ExprResult finite_set(std ExprPtr upper
ExprResult ceil(const ExprPtr &expression, ComputationContext &context)
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
ExprResult interval(ExprPtr lower, ExprPtr upper, bool lower_closed, bool upper_closed)
ExprResult integer(Integer)=delete
ExprResult neg(const ExprPtr &expression, ComputationContext &context)
ExprResult real(const ExprPtr &expression, ComputationContext &context)
ExprResult approx_real(double value)
ExprResult acos(const ExprPtr &expression, ComputationContext &context)
Result< SolutionSet > SolveResult
ExprResult sub(const ExprPtr &lhs, const ExprPtr &rhs, ComputationContext &context)
ExprSetResult expr_set(std::vector< ExprPtr > elements)
ExprResult with_unit_definition(const ExprPtr &value, std::string display_unit, UnitDefinition definition, ComputationContext &context)
ExprResult div(const ExprPtr &numerator, const ExprPtr &denominator, ComputationContext &context)
ExprResult ge(const ExprPtr &lhs, const ExprPtr &rhs)
ExprResult mul(const ExprPtr &lhs, const ExprPtr &rhs, ComputationContext &context)
const std::string ComputationContext const SolveOptions & options
Result< bool > expr_set_contains(const ExprSet &set, const ExprPtr &element)
ExprResult strip_to_base_value(const ExprPtr &quantity, ComputationContext &context)
Result< ExprPtr > ExprResult
ExprSetResult solve_expr_set(const ExprPtr &equation, const std::string &variable, ComputationContext &context, const SolveOptions &options)
ExprResult add(const ExprPtr &lhs, const ExprPtr &rhs, ComputationContext &context)
ExprResult conj(const ExprPtr &expression, ComputationContext &context)
Result< bool > equivalent(const SymbolicExpr &lhs, const SymbolicExpr &rhs, ComputationContext &context, const EqvOptions &options)
ExprResult atan(const ExprPtr &expression, ComputationContext &context)
ExprResult clamp(const ExprPtr &expression, const ExprPtr &lower, const ExprPtr &upper, ComputationContext &context)
ExprResult asin(const ExprPtr &expression, ComputationContext &context)
ExprResult logical_not(const ExprPtr &expression)
ExprResult sin(const ExprPtr &expression, ComputationContext &context)
ExprResult expand(const ExprPtr &expression, ComputationContext &context)
std::shared_ptr< const SymbolicExpr > ConstExprPtr
ExprResult convert_to_unit_definition(const ExprPtr &quantity, std::string display_unit, UnitDefinition definition, ComputationContext &context)
ExprResult ne(const ExprPtr &lhs, const ExprPtr &rhs)
Result< bool > expr_set_subset(const ExprSet &lhs, const ExprSet &rhs)
RelationOp
Stable relational operator used by public APIs.
ExprSetResult expr_set_symmetric_difference(const ExprSet &lhs, const ExprSet &rhs)
ExprResult simplify(const ExprPtr &expression, ComputationContext &context)
ExprSetResult expr_set_intersection(const ExprSet &lhs, const ExprSet &rhs)
ExprResult tan(const ExprPtr &expression, ComputationContext &context)
Result< bool > expr_set_not_contains(const ExprSet &set, const ExprPtr &element)
const ExprPtr RelationOp op
std::string UnitDefinition definition
ExprResult complex(ExprPtr real, ExprPtr imag)
Result< bool > expr_set_subset_domain(const ExprSet &set, const NumberDomainSet &domain)
ExprResult finite_set(std::vector< ExprPtr > elements)
__attribute__((visibility("default"))) ExprResult function(const std __attribute__((visibility("default"))) ExprResult finite_set(std ExprPtr bool lower_closed
bool contains(const SymbolicExpr &expression, const std::string &variable)
NumberDomainSet integers()
const std::vector< Binding > & bindings
const NumberDomainSet & domain
ExprResult member(const ExprPtr &element, const ExprPtr &set, ComputationContext &context)
ExprResult cos(const ExprPtr &expression, ComputationContext &context)
std::shared_ptr< SymbolicExpr > ExprPtr
ExprResult membership(const ExprPtr &element, const ExprPtr &set, bool negated)
Result< bool > domain_subset(const NumberDomainSet &lhs, const NumberDomainSet &rhs)
ExprSetResult expr_set_difference(const ExprSet &lhs, const ExprSet &rhs)
const ExprPtr const std::vector< std::string > & wildcards
ExprResult sqrt(const ExprPtr &expression, ComputationContext &context)
ExprSetResult roots(const ExprPtr &expression, const std::string &variable, ComputationContext &context, const SolveOptions &options)
ExprMatchResult expr_match(const ExprPtr &pattern, const ExprPtr &target, const std::vector< std::string > &wildcards, ComputationContext &context)
ExprResult relation(const ExprPtr &lhs, const ExprPtr &rhs, RelationOp op)
ExprResult gt(const ExprPtr &lhs, const ExprPtr &rhs)
const std::string const ExprPtr & value
const char * error_name(CasErrc code) noexcept
ExprResult log(const ExprPtr &expression, ComputationContext &context)
Result< Binding > BindingResult
NumberDomainSet expressions()
NumberDomainSet rationals()
Result< bool > domain_contains(const NumberDomainSet &domain, const ExprPtr &element)
NumberDomainSet complexes()
std::vector< ExprMatchBinding > bindings
ExprResult lt(const ExprPtr &lhs, const ExprPtr &rhs)
__attribute__((visibility("default"))) ExprResult function(const std __attribute__((visibility("default"))) ExprResult finite_set(std ExprPtr bool bool upper_closed
Result< ExprSet > ExprSetResult
Result< ExprMatch > ExprMatchResult
ExprResult floor(const ExprPtr &expression, ComputationContext &context)
const ExprPtr & denominator
ExprResult function(const std::string &name, std::vector< ExprPtr > arguments)
ExprResult differentiate(const ExprPtr &expression, const std::string &variable, ComputationContext &context)
SolveResult solve_set(const ExprPtr &equation, const std::string &variable, ComputationContext &context, const SolveOptions &options)
const ExprPtr bool negated
ExprResult convert_to_unit(const ExprPtr &quantity, const std::string &unit, ComputationContext &context)
bool structurally_equal(const SymbolicExpr &lhs, const SymbolicExpr &rhs)
std::unordered_map< std::string, double > NumericBindings
ExprResult abs(const ExprPtr &expression, ComputationContext &context)
__attribute__((visibility("default"))) Result< EqvProfile > eqv_profile_from_name(const std const std::string & name
ExprResult logical_and(const ExprPtr &lhs, const ExprPtr &rhs)
ExprResult rational(const Rational &value)
ExprSetResult solve(const ExprPtr &equation, const std::string &variable, ComputationContext &context, const SolveOptions &options)
ExprResult round(const ExprPtr &expression, ComputationContext &context)
ExprSetResult expr_set_union(const ExprSet &lhs, const ExprSet &rhs)
ExprResult substitute(const ExprPtr &expression, const std::string &variable, const ExprPtr &value, ComputationContext &context)
精确有理数 Rational,基于 BigInt 分子/分母表示,自动约分。
方程求解策略调度器 solve_dispatch 及相关选项结构体.
符号表达式主类 SymbolicExpr 及其工厂方法,运算接口.