13 const std::string&
u,
const std::string&
v,
18 for (
size_t i = 0; i < 3; ++i) {
25 for (
size_t i = 0; i < 3; ++i) {
32 for (std::size_t index = 0; index < 3; ++index) {
41 const std::string&
u,
const std::string&
v,
42 const std::shared_ptr<SymbolicExpr>&
u_lower,
const std::shared_ptr<SymbolicExpr>&
u_upper,
43 const std::shared_ptr<SymbolicExpr>&
v_lower,
const std::shared_ptr<SymbolicExpr>&
v_upper,
47 context.limits().max_ast_nodes,
"surface_integral_scalar");
48 const std::string operation =
"surface_integral_scalar";
63 context, operation, transform_budget);
66 }
catch (
const std::bad_alloc&) {
68 "surface integral allocation failed",
70 }
catch (
const std::length_error& error) {
72 }
catch (
const std::exception&
e) {
79 const std::string&
u,
const std::string&
v,
80 const std::shared_ptr<SymbolicExpr>&
u_lower,
const std::shared_ptr<SymbolicExpr>&
u_upper,
81 const std::shared_ptr<SymbolicExpr>&
v_lower,
const std::shared_ptr<SymbolicExpr>&
v_upper)
90 const std::string&
u,
const std::string&
v,
91 const std::shared_ptr<SymbolicExpr>&
u_lower,
const std::shared_ptr<SymbolicExpr>&
u_upper,
92 const std::shared_ptr<SymbolicExpr>&
v_lower,
const std::shared_ptr<SymbolicExpr>&
v_upper)
96 (
context).limits().max_ast_nodes,
"transform");
98 throw std::invalid_argument(
"surface_integral_scalar: f must not be null");
101 throw std::invalid_argument(
102 "surface_integral_scalar: parametrization must have 3 components");
105 throw std::invalid_argument(
"surface_integral_scalar: bounds must not be null");
108 std::vector<std::string> coord_vars = {
"x",
"y",
"z"};
111 for (
size_t i = 0; i < 3; ++i) {
118 std::shared_ptr<SymbolicExpr> mag_sq =
nullptr;
119 for (
size_t i = 0; i < 3; ++i) {
120 auto sq = SymbolicExpr::power(cross[i], SymbolicExpr::number(2));
125 mag_sq = SymbolicExpr::add(mag_sq, sq);
130 auto magnitude = SymbolicExpr::sqrt(mag_sq);
133 auto integrand = SymbolicExpr::multiply(f_composed, magnitude);
138 std::vector<IntegrationStep>
steps = {
143 if (!result)
throw result.error();
150 const std::string&
u,
const std::string&
v,
151 const std::shared_ptr<SymbolicExpr>&
u_lower,
const std::shared_ptr<SymbolicExpr>&
u_upper,
152 const std::shared_ptr<SymbolicExpr>&
v_lower,
const std::shared_ptr<SymbolicExpr>&
v_upper,
156 context.limits().max_ast_nodes,
"surface_integral_vector");
157 const std::string operation =
"surface_integral_vector";
174 context, operation, transform_budget);
177 }
catch (
const std::bad_alloc&) {
179 "surface integral allocation failed",
181 }
catch (
const std::length_error& error) {
183 }
catch (
const std::exception&
e) {
190 const std::string&
u,
const std::string&
v,
191 const std::shared_ptr<SymbolicExpr>&
u_lower,
const std::shared_ptr<SymbolicExpr>&
u_upper,
192 const std::shared_ptr<SymbolicExpr>&
v_lower,
const std::shared_ptr<SymbolicExpr>&
v_upper)
201 const std::string&
u,
const std::string&
v,
202 const std::shared_ptr<SymbolicExpr>&
u_lower,
const std::shared_ptr<SymbolicExpr>&
u_upper,
203 const std::shared_ptr<SymbolicExpr>&
v_lower,
const std::shared_ptr<SymbolicExpr>&
v_upper)
207 (
context).limits().max_ast_nodes,
"transform");
209 throw std::invalid_argument(
210 "surface_integral_vector: F must have 3 components");
213 throw std::invalid_argument(
214 "surface_integral_vector: parametrization must have 3 components");
217 throw std::invalid_argument(
"surface_integral_vector: bounds must not be null");
220 std::vector<std::string> coord_vars = {
"x",
"y",
"z"};
224 std::shared_ptr<SymbolicExpr>
dot_product =
nullptr;
225 for (
size_t i = 0; i < 3; ++i) {
230 auto Fi_composed = F[i];
231 for (
size_t j = 0; j < 3; ++j) {
236 auto term = SymbolicExpr::multiply(Fi_composed, cross[i]);
248 return SymbolicExpr::number(0);
253 std::vector<IntegrationStep>
steps = {
258 if (!result)
throw result.error();
static Result failure(CasErrc code, std::string message, std::string operation={})
Symbolic integration APIs.
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
SymbolicNodePtr normalize_node(const SymbolicNodePtr &node, RewriteBudget &budget, const FactsQuery &facts, Domain domain)
SymbolicNodePtr substitute_node(const SymbolicNodePtr &node, const std::string &variable, const SymbolicNodePtr &replacement, RewriteBudget &budget, const FactsQuery &facts, Domain domain)
VectorField vector_calculus_cross_product_partials(const VectorField ¶metrization, const std::string &u, const std::string &v, detail::RewriteBudget &transform_budget)
VectorCalculusExprResult surface_integral_scalar_strict(const std::shared_ptr< SymbolicExpr > &function, const VectorField ¶metrization, const std::string &u, const std::string &v, const std::shared_ptr< SymbolicExpr > &u_lower, const std::shared_ptr< SymbolicExpr > &u_upper, const std::shared_ptr< SymbolicExpr > &v_lower, const std::shared_ptr< SymbolicExpr > &v_upper, ComputationContext &context, const std::string &operation, detail::RewriteBudget &transform_budget)
Result< void > vector_calculus_validate_surface_vector_inputs(const VectorField &F, const VectorField ¶metrization, const std::string &u, const std::string &v, const std::shared_ptr< SymbolicExpr > &u_lower, const std::shared_ptr< SymbolicExpr > &u_upper, const std::shared_ptr< SymbolicExpr > &v_lower, const std::shared_ptr< SymbolicExpr > &v_upper, ComputationContext &context, const std::string &operation)
Result< void > vector_calculus_validate_surface_scalar_inputs(const std::shared_ptr< SymbolicExpr > &f, const VectorField ¶metrization, const std::string &u, const std::string &v, const std::shared_ptr< SymbolicExpr > &u_lower, const std::shared_ptr< SymbolicExpr > &u_upper, const std::shared_ptr< SymbolicExpr > &v_lower, const std::shared_ptr< SymbolicExpr > &v_upper, ComputationContext &context, const std::string &operation)
VectorCalculusExprResult surface_integral_vector_strict(const VectorField &field, const VectorField ¶metrization, const std::string &u, const std::string &v, const std::shared_ptr< SymbolicExpr > &u_lower, const std::shared_ptr< SymbolicExpr > &u_upper, const std::shared_ptr< SymbolicExpr > &v_lower, const std::shared_ptr< SymbolicExpr > &v_upper, ComputationContext &context, const std::string &operation, detail::RewriteBudget &transform_budget)
std::shared_ptr< SymbolicExpr > vector_calculus_cross_component(const VectorField &left, const VectorField &right, std::size_t index)
__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
VectorCalculusExprResult surface_integral_scalar_checked(const std::shared_ptr< SymbolicExpr > &f, const VectorField ¶metrization, const std::string &u, const std::string &v, const std::shared_ptr< SymbolicExpr > &u_lower, const std::shared_ptr< SymbolicExpr > &u_upper, const std::shared_ptr< SymbolicExpr > &v_lower, const std::shared_ptr< SymbolicExpr > &v_upper, ComputationContext &context)
__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 const std::shared_ptr< SymbolicExpr > const std::shared_ptr< SymbolicExpr > const std::shared_ptr< SymbolicExpr > & v_lower
__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 const std::shared_ptr< SymbolicExpr > & u_lower
VectorCalculusExprResult surface_integral_vector_checked(const VectorField &F, const VectorField ¶metrization, const std::string &u, const std::string &v, const std::shared_ptr< SymbolicExpr > &u_lower, const std::shared_ptr< SymbolicExpr > &u_upper, const std::shared_ptr< SymbolicExpr > &v_lower, const std::shared_ptr< SymbolicExpr > &v_upper, ComputationContext &context)
__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 const std::shared_ptr< SymbolicExpr > const std::shared_ptr< SymbolicExpr > const std::shared_ptr< SymbolicExpr > const std::shared_ptr< SymbolicExpr > & v_upper
std::vector< std::shared_ptr< SymbolicExpr > > VectorField
向量场由标量表达式组成。
std::shared_ptr< SymbolicExpr > surface_integral_scalar(const std::shared_ptr< SymbolicExpr > &f, const VectorField ¶metrization, const std::string &u, const std::string &v, const std::shared_ptr< SymbolicExpr > &u_lower, const std::shared_ptr< SymbolicExpr > &u_upper, const std::shared_ptr< SymbolicExpr > &v_lower, const std::shared_ptr< SymbolicExpr > &v_upper)
__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 & parametrization
Result< SymbolicExpr > integrate_multiple_checked(const SymbolicExpr &integrand, const std::vector< IntegrationStep > &steps, Integrator &integrator, ComputationContext &context)
Result< std::shared_ptr< SymbolicExpr > > VectorCalculusExprResult
__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 const std::shared_ptr< SymbolicExpr > const std::shared_ptr< SymbolicExpr > & u_upper
const std::vector< IntegrationStep > Integrator & integrator
std::shared_ptr< SymbolicExpr > surface_integral_vector(const VectorField &F, const VectorField ¶metrization, const std::string &u, const std::string &v, const std::shared_ptr< SymbolicExpr > &u_lower, const std::shared_ptr< SymbolicExpr > &u_upper, const std::shared_ptr< SymbolicExpr > &v_lower, const std::shared_ptr< SymbolicExpr > &v_upper)
VectorCalculusExprResult dot_product(const VectorField &a, const VectorField &b)
__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 & u