LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
integration_table_rules.hpp
浏览该文件的文档.
1#pragma once
4
7
8inline auto u_is_var(const std::string& wc) {
9 return [wc](const MatchMap& m, const std::string& var, ComputationContext&) {
10 auto it = m.find(wc);
11 if (it == m.end()) { return false; }
12 auto value = std::dynamic_pointer_cast<const VariableNode>(detail::node(it->second));
13 return value && !value->is_constant() && value->name() == var;
14 };
15}
16
17inline auto u_is_var_a_indep(const std::string& u_wc, const std::string& a_wc) {
18 return [u_matches = u_is_var(u_wc), a_wc](
19 const MatchMap& m, const std::string& var, ComputationContext& context) {
20 if (!u_matches(m, var, context)) { return false; }
21 auto a = m.find(a_wc);
22 return a != m.end() && !expression_depends_on_variable(detail::node(a->second), var);
23 };
24}
25
26inline auto u_is_var_a_nonzero(const std::string& u_wc, const std::string& a_wc,
27 bool real_scale = false) {
28 return [independent = u_is_var_a_indep(u_wc, a_wc), u_wc, a_wc, real_scale](
29 const MatchMap& m, const std::string& var, ComputationContext& context) {
30 if (!independent(m, var, context)) { return false; }
31 std::optional<detail::AssumptionFacts> assumptions;
32 if (context.assumptions()) { assumptions.emplace(*context.assumptions()); }
33 const FactsQuery& facts = assumptions ? static_cast<const FactsQuery&>(*assumptions) : detail::no_facts();
34 auto a = detail::node(m.at(a_wc));
35 return (!real_scale ||
39 };
40}
41
42inline auto u_is_real_var(const std::string& wc) {
43 return [u_matches = u_is_var(wc), wc](
44 const MatchMap& m, const std::string& var, ComputationContext& context) {
45 if (!u_matches(m, var, context)) { return false; }
46 std::optional<detail::AssumptionFacts> assumptions;
47 if (context.assumptions()) { assumptions.emplace(*context.assumptions()); }
49 assumptions ? static_cast<const FactsQuery&>(*assumptions) : detail::no_facts(), context));
50 };
51}
52
53void load_exponential_rules(std::vector<detail::IntegrationEntry>& table);
54void load_trig_derivatives_rules(std::vector<detail::IntegrationEntry>& table);
55void load_trig_squares_rules(std::vector<detail::IntegrationEntry>& table);
56void load_trig_primitives_rules(std::vector<detail::IntegrationEntry>& table);
57void load_inverse_trig_rules(std::vector<detail::IntegrationEntry>& table);
58void load_hyperbolic_rules(std::vector<detail::IntegrationEntry>& table);
59void load_algebraic_elementary_rules(std::vector<detail::IntegrationEntry>& table);
60void load_algebraic_radicals_rules(std::vector<detail::IntegrationEntry>& table);
61void load_algebraic_reciprocals_rules(std::vector<detail::IntegrationEntry>& table);
62void load_polynomial_rules(std::vector<detail::IntegrationEntry>& table);
63void load_logarithmic_rules(std::vector<detail::IntegrationEntry>& table);
64void load_exponential_base_rules(std::vector<detail::IntegrationEntry>& table);
65void load_scaled_radical_rules(std::vector<detail::IntegrationEntry>& table);
66void load_scaled_trig_rules(std::vector<detail::IntegrationEntry>& table);
67void load_exponential_trig_rules(std::vector<detail::IntegrationEntry>& table);
68}
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
Result< Tribool > query_nonzero_value(const Node &node, const FactsQuery &facts, Domain domain, ComputationContext &context)
const FactsQuery & no_facts() noexcept
Result< Tribool > query_real_value(const Node &node, const FactsQuery &facts, ComputationContext &context)
void load_exponential_rules(std::vector< detail::IntegrationEntry > &table)
void load_trig_primitives_rules(std::vector< detail::IntegrationEntry > &table)
void load_scaled_radical_rules(std::vector< detail::IntegrationEntry > &table)
auto u_is_var_a_nonzero(const std::string &u_wc, const std::string &a_wc, bool real_scale=false)
auto u_is_var_a_indep(const std::string &u_wc, const std::string &a_wc)
void load_algebraic_elementary_rules(std::vector< detail::IntegrationEntry > &table)
void load_trig_squares_rules(std::vector< detail::IntegrationEntry > &table)
void load_polynomial_rules(std::vector< detail::IntegrationEntry > &table)
void load_hyperbolic_rules(std::vector< detail::IntegrationEntry > &table)
void load_inverse_trig_rules(std::vector< detail::IntegrationEntry > &table)
void load_exponential_trig_rules(std::vector< detail::IntegrationEntry > &table)
void load_logarithmic_rules(std::vector< detail::IntegrationEntry > &table)
void load_exponential_base_rules(std::vector< detail::IntegrationEntry > &table)
void load_algebraic_reciprocals_rules(std::vector< detail::IntegrationEntry > &table)
void load_algebraic_radicals_rules(std::vector< detail::IntegrationEntry > &table)
void load_scaled_trig_rules(std::vector< detail::IntegrationEntry > &table)
void load_trig_derivatives_rules(std::vector< detail::IntegrationEntry > &table)
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
@ Real
Real numbers
bool expression_depends_on_variable(const detail::SymbolicNodePtr &expression, const std::string &variable, detail::RewriteBudget *budget)
__attribute__((visibility("default"))) VectorCalculusExprResult curve_integral_scalar_checked(const std __attribute__((visibility("default"))) VectorCalculusExprResult curve_integral_scalar_checked(const std __attribute__((visibility("default"))) std const VectorField const std::string const std::shared_ptr< SymbolicExpr > & a
std::unordered_map< std::string, SymbolicExpr > MatchMap
匹配结果映射,通配符名称 → 绑定的表达式
const std::string const ExprPtr & value
bool normalization_proved(const Result< Tribool > &result)