LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
expression_analysis.hpp
浏览该文件的文档.
1#pragma once
2
5#include "result.hpp"
7
8#include <optional>
9#include <set>
10#include <string>
11
12namespace LMCAS {
13LMCAS_API std::optional<int> exact_small_integer_node(
14 const detail::SymbolicNodePtr& node, int min_value, int max_value);
15
16namespace detail {
17std::optional<Rational> exact_rational_value(const NumberNode& number);
18std::optional<Rational> exact_rational_value(const SymbolicNodePtr& node);
19
21 switch (op) {
22 case RelationOp::GT: return RelationOp::LT;
24 case RelationOp::LT: return RelationOp::GT;
26 default: return op;
27 }
28}
29
31 const SymbolicExpr& expression, const std::string& variable,
33std::vector<std::shared_ptr<SymbolicExpr>> make_rootof_solutions_impl(
34 const Polynomial<SymbolicPolyCoeff>& polynomial,
35 const std::string& variable, ComputationContext& context);
36
37struct AffineForm {
38 std::shared_ptr<SymbolicExpr> slope;
39 std::shared_ptr<SymbolicExpr> offset;
40};
42 const SymbolicExpr& expression, const std::string& variable,
44
45bool is_imaginary_unit_name(const std::string& name);
46std::set<std::string> all_variable_names(
47 const SymbolicNodePtr& expression, RewriteBudget* budget = nullptr);
49 const SymbolicNodePtr& expression, const std::string& variable,
50 RewriteBudget* budget = nullptr);
51}
52LMCAS_API std::set<std::string> free_variables(
53 const detail::SymbolicNodePtr& expression,
54 detail::RewriteBudget* budget = nullptr);
56 const detail::SymbolicNodePtr& expression,
57 const std::string& variable,
58 detail::RewriteBudget* budget = nullptr);
60 const detail::SymbolicNodePtr& expression,
61 const std::string& variable,
62 const detail::SymbolicNodePtr& replacement,
63 detail::RewriteBudget* budget = nullptr);
64
65}
一元多项式模板类
#define LMCAS_API
多元 Hensel 提升(单变量步)
Result< Polynomial< SymbolicPolyCoeff > > symbolic_to_poly_checked(const SymbolicExpr &expression, const std::string &variable, ComputationContext &context)
bool is_imaginary_unit_name(const std::string &name)
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
std::shared_ptr< SymbolicExpr > slope
const std::string & variable
std::shared_ptr< const SymbolicNode > SymbolicNodePtr
bool integration_depends_on_variable(const SymbolicNodePtr &expression, const std::string &variable, RewriteBudget *budget=nullptr)
std::optional< Rational > exact_rational_value(const NumberNode &number)
std::vector< std::shared_ptr< SymbolicExpr > > make_rootof_solutions_impl(const Polynomial< SymbolicPolyCoeff > &polynomial, const std::string &variable, ComputationContext &context)
std::size_t std::size_t ComputationContext & context
std::set< std::string > all_variable_names(const SymbolicNodePtr &expression, RewriteBudget *budget=nullptr)
Result< std::optional< AffineForm > > recognize_affine(const SymbolicExpr &expression, const std::string &variable, ComputationContext &context)
std::shared_ptr< SymbolicExpr > offset
constexpr RelationOp reversed_relation(RelationOp op) noexcept
const std::string & variable
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
bool expression_depends_on_variable(const detail::SymbolicNodePtr &expression, const std::string &variable, detail::RewriteBudget *budget)
RelationOp
Stable relational operator used by public APIs.
const ExprPtr RelationOp op
std::optional< int > exact_small_integer_node(const detail::SymbolicNodePtr &node, int min_value, int max_value)
std::set< std::string > free_variables(const detail::SymbolicNodePtr &expression, detail::RewriteBudget *budget)
__attribute__((visibility("default"))) Result< EqvProfile > eqv_profile_from_name(const std const std::string & name
detail::SymbolicNodePtr substitute_free(const detail::SymbolicNodePtr &expression, const std::string &variable, const detail::SymbolicNodePtr &replacement, detail::RewriteBudget *budget)
符号表达式与一元多项式的转换。
内部 AST 定义。