22 Integrator(Integrator&&) noexcept;
23 Integrator& operator=(Integrator&&) noexcept;
24 Integrator(const Integrator&) = delete;
25 Integrator& operator=(const Integrator&) = delete;
27 Result<SymbolicExpr> integrate_checked(
28 const SymbolicExpr& expr, const std::
string& var_name,
29 ComputationContext& context);
31 Result<SymbolicExpr> integrate_def_checked(
32 const SymbolicExpr& expr, const std::
string& var_name,
33 const SymbolicExpr& lower, const SymbolicExpr& upper,
34 ComputationContext& context);
37 Result<detail::IntegralParts> integrate_recursive(
38 const SymbolicExpr&, const std::
string&, ComputationContext&,
int,
39 const SymbolicExpr* original =
nullptr);
40 Result<std::optional<detail::IntegralParts>> apply_linearity(
41 const SymbolicExpr&, const std::
string&, ComputationContext&,
int);
42 Result<std::optional<detail::IntegralParts>> dispatch_builtins(
43 const SymbolicExpr&, const std::
string&, ComputationContext&,
int);
44 Result<std::optional<detail::IntegralParts>> try_power_rule(
45 const SymbolicExpr&, const std::
string&, ComputationContext&,
int);
46 Result<std::optional<detail::IntegralParts>> try_table_lookup(
47 const SymbolicExpr&, const std::
string&, ComputationContext&,
int);
48 Result<std::optional<detail::IntegralParts>> try_linear_substitution(
49 const SymbolicExpr&, const std::
string&, ComputationContext&,
int);
50 Result<std::optional<detail::IntegralParts>> try_substitution(
51 const SymbolicExpr&, const std::
string&, ComputationContext&,
int);
52 Result<std::optional<detail::IntegralParts>> try_trig_substitution(
53 const SymbolicExpr&, const std::
string&, ComputationContext&,
int);
54 Result<std::optional<detail::IntegralParts>> try_trig_combination(
55 const SymbolicExpr&, const std::
string&, ComputationContext&,
int);
56 Result<std::optional<detail::IntegralParts>> try_weierstrass(
57 const SymbolicExpr&, const std::
string&, ComputationContext&,
int);
58 Result<std::optional<detail::IntegralParts>> try_rational_decomposition(
59 const SymbolicExpr&, const std::
string&, ComputationContext&,
int);
60 Result<std::optional<detail::IntegralParts>> try_special_function(
61 const SymbolicExpr&, const std::
string&, ComputationContext&,
int);
62 Result<std::optional<detail::IntegralParts>> try_integration_by_parts(
63 const SymbolicExpr&, const std::
string&, ComputationContext&,
int);
65 std::vector<detail::IntegrationEntry> entries_;
69 SymbolicExpr integrand;
70 SymbolicExpr original;
71 std::string placeholder;
73 std::vector<Entry> history;
74 std::set<std::string> occupied_names;
75 std::size_t next_placeholder = 0;
77 CycleState cycle_state_;
78 std::size_t query_depth_ = 0;
80 std::shared_ptr<SymbolicExpr> check_cycle(
81 const SymbolicExpr&,
const std::string&, ComputationContext&);
82 bool resolve_cycle(detail::IntegralParts&,
const std::string&,
83 const std::string&, ComputationContext&);
84 bool has_cycle_placeholder(
const SymbolicExpr&)
const;
符号表达式主类 SymbolicExpr 及其工厂方法,运算接口.