8 const std::string& var,
10 const std::string& operation)
12 auto step =
context.consume_steps(1, operation);
18 "expression cannot be null", operation);
22 "variable name cannot be empty", operation);
28 const std::shared_ptr<SymbolicExpr>& first,
29 const std::shared_ptr<SymbolicExpr>& second,
30 const std::string& var,
32 const std::string& operation)
34 auto step =
context.consume_steps(1, operation);
40 "expression cannot be null", operation);
44 "variable name cannot be empty", operation);
50 const std::shared_ptr<SymbolicExpr>& expr,
51 const std::string& var,
52 const std::shared_ptr<SymbolicExpr>&
target,
54 const std::string& operation)
62 "target expression cannot be null",
69 const std::shared_ptr<SymbolicExpr>& expr,
70 const std::string& var,
71 const std::shared_ptr<SymbolicExpr>&
a,
72 const std::shared_ptr<SymbolicExpr>&
b,
74 const std::string& operation)
82 "bounds cannot be null", operation);
88 auto function = std::dynamic_pointer_cast<const FunctionNode>(node);
106 for (
auto&
op : m->operands()) {
120 const std::shared_ptr<SymbolicExpr>&
b)
124 if (!a_exists || !b_exists) {
125 return a_exists == b_exists;
130 const std::shared_ptr<SymbolicExpr>& expr)
146 const std::shared_ptr<SymbolicExpr>& f,
const std::string& var)
150 (
context).limits().max_ast_nodes,
"transform");
156 auto ln_f = SymbolicExpr::ln(f);
164 auto result = SymbolicExpr::multiply(f, d_ln_f);
169 const std::shared_ptr<SymbolicExpr>& f,
const std::string& var)
173 (
context).limits().max_ast_nodes,
"transform");
183 const std::shared_ptr<SymbolicExpr>& f,
const std::vector<std::string>&
vars)
187 (
context).limits().max_ast_nodes,
"transform");
188 std::vector<std::pair<std::shared_ptr<SymbolicExpr>, std::string>> result;
193 result.reserve(
vars.size());
194 for (
const auto&
v :
vars) {
196 result.emplace_back(partial,
v);
static Result failure(CasErrc code, std::string message, std::string operation={})
static Result success(T value)
std::shared_ptr< SymbolicExpr > calculus_utils_make_abs(const std::shared_ptr< SymbolicExpr > &expr)
static bool is_infinity_node(const std::shared_ptr< const SymbolicNode > &node)
Result< void > calculus_utils_validate_two_exprs(const std::shared_ptr< SymbolicExpr > &first, const std::shared_ptr< SymbolicExpr > &second, const std::string &var, ComputationContext &context, const std::string &operation)
Result< void > calculus_utils_validate_expr_target(const std::shared_ptr< SymbolicExpr > &expr, const std::string &var, const std::shared_ptr< SymbolicExpr > &target, ComputationContext &context, const std::string &operation)
bool calculus_utils_is_infinity(const std::shared_ptr< SymbolicExpr > &expr)
判断表达式是否包含无穷大节点.
bool calculus_utils_expr_equal(const std::shared_ptr< SymbolicExpr > &a, const std::shared_ptr< SymbolicExpr > &b)
判断两个表达式是否结构相等.
Result< void > calculus_utils_validate_expr(const std::shared_ptr< SymbolicExpr > &expr, const std::string &var, ComputationContext &context, const std::string &operation)
Result< void > calculus_utils_validate_expr_bounds(const std::shared_ptr< SymbolicExpr > &expr, const std::string &var, const std::shared_ptr< SymbolicExpr > &a, const std::shared_ptr< SymbolicExpr > &b, ComputationContext &context, const std::string &operation)
SymbolicNodePtr differentiate_node(const SymbolicNodePtr &node, const std::string &variable, RewriteBudget &budget, const FactsQuery &facts, Domain domain)
std::shared_ptr<::LMCAS::SymbolicExpr > make_expression_ptr(SymbolicNodePtr root)
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
std::shared_ptr< const Node > make_node(Args &&... args)
SymbolicNodePtr normalize_node(const SymbolicNodePtr &node, RewriteBudget &budget, const FactsQuery &facts, Domain domain)
std::vector< std::pair< std::shared_ptr< SymbolicExpr >, std::string > > total_differential(const std::shared_ptr< SymbolicExpr > &f, const std::vector< std::string > &vars)
__attribute__((visibility("default"))) VectorCalculusExprResult surface_integral_scalar_checked(const std __attribute__((visibility("default"))) VectorCalculusExprResult surface_integral_scalar_checked(const std __attribute__((visibility("default"))) std const VectorField const std::string const std::string & v
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context
std::shared_ptr< SymbolicExpr > differential(const std::shared_ptr< SymbolicExpr > &f, const std::string &var)
__attribute__((visibility("default"))) VectorCalculusFieldResult gradient_checked(const std __attribute__((visibility("default"))) VectorCalculusFieldResult gradient_checked(const std __attribute__((visibility("default"))) VectorField gradient(const std const std::vector< std::string > & vars
const ExprPtr RelationOp op
__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::shared_ptr< SymbolicExpr > log_differentiate(const std::shared_ptr< SymbolicExpr > &f, const std::string &var)
ExprResult function(const std::string &name, std::vector< ExprPtr > arguments)