LMCAS
Lamina Computer Algebra System
Toggle main menu visibility
载入中...
搜索中...
未找到
differentiation_visitor.hpp
浏览该文件的文档.
1
/**
2
* @file differentiation_visitor.hpp
3
* @brief 微分访问器,对 AST 执行符号求导。
4
*/
5
#pragma once
6
#include "
internal/symbolic_ast.hpp
"
7
#include <stdexcept>
8
#include <string>
9
10
namespace
LMCAS
{
11
12
class
DifferentiationVisitor
:
public
LMCAS::detail::SymbolicVisitor
{
13
std::string
var
;
14
15
[[noreturn]]
void
unsupported
(
const
char
* node_type)
const
{
16
throw
CasError
{
CasErrc::UnsupportedExpression
, std::string(node_type) +
17
" differentiation is outside the current supported domain"
,
18
"LMCAS.differentiate"
};
19
}
20
21
public
:
22
std::shared_ptr<const SymbolicNode>
result
;
/**< 求导结果节点。 */
23
24
25
/**
26
* @brief 构造普通求导访问器。
27
* @param v 求导变量名
28
*/
29
DifferentiationVisitor
(
const
std::string&
v
,
detail::RewriteBudget
& budget)
30
:
SymbolicVisitor
(&budget),
var
(
v
),
result
(nullptr) {}
31
32
33
/**
34
* @brief 获取求导结果。
35
* @return 求导后的 AST 节点
36
*/
37
std::shared_ptr<const SymbolicNode>
get_result
()
const
{
38
return
result
;
39
}
40
void
visit
(
const
NumberNode
&)
override
;
41
void
visit
(
const
VariableNode
& node)
override
;
42
void
visit
(
const
AddNode
& node)
override
;
43
void
visit
(
const
MultiplyNode
& node)
override
;
44
void
visit
(
const
PowerNode
& node)
override
;
45
void
visit
(
const
FunctionNode
& node)
override
;
46
void
visit
(
const
MatrixNode
& node)
override
;
47
void
visit
(
const
RelationalNode
&)
override
;
48
void
visit
(
const
LogicalNode
&)
override
;
49
void
visit
(
const
ComplexNode
& node)
override
;
50
void
visit
(
const
PiecewiseNode
& node)
override
;
51
void
visit
(
const
UninterpretedFunctionNode
&)
override
;
52
void
visit
(
const
SummationNode
&)
override
;
53
void
visit
(
const
ProductNode
&)
override
;
54
void
visit
(
const
TransformNode
&)
override
;
55
void
visit
(
const
QuantifierNode
&)
override
;
56
void
visit
(
const
SetBuilderNode
&)
override
;
57
void
visit
(
const
FiniteSetNode
&)
override
;
58
void
visit
(
const
IntervalNode
&)
override
;
59
void
visit
(
const
MembershipNode
&)
override
;
60
void
visit
(
const
QuantityNode
& node)
override
;
61
void
visit
(
const
IntegralNode
& node)
override
;
62
void
visit
(
const
LimitNode
&)
override
;
63
void
visit
(
const
RootOfNode
&)
override
;
64
65
private
:
66
void
set_result
(std::shared_ptr<const SymbolicNode> candidate) {
67
rewrite_budget
()->
measure_result
(candidate);
68
result
= std::move(candidate);
69
}
70
void
append_result
(std::vector<std::shared_ptr<const SymbolicNode>>& nodes,
71
std::size_t& size, std::shared_ptr<const SymbolicNode> candidate) {
72
size =
rewrite_budget
()->
append_size
(size,
rewrite_budget
()->measure(candidate));
73
nodes.push_back(std::move(candidate));
74
}
75
76
void
differentiate_atan2
(
const
FunctionNode
& node);
77
};
78
79
}
LMCAS::AddNode
加法节点,表示多个操作数的求和。
定义
arithmetic.hpp:55
LMCAS::ComplexNode
复数节点,表示 real + imag * i。
定义
numbers.hpp:74
LMCAS::DifferentiationVisitor::unsupported
void unsupported(const char *node_type) const
定义
differentiation_visitor.hpp:15
LMCAS::DifferentiationVisitor::result
std::shared_ptr< const SymbolicNode > result
求导结果节点。
定义
differentiation_visitor.hpp:22
LMCAS::DifferentiationVisitor::var
std::string var
定义
differentiation_visitor.hpp:13
LMCAS::DifferentiationVisitor::DifferentiationVisitor
DifferentiationVisitor(const std::string &v, detail::RewriteBudget &budget)
构造普通求导访问器。
定义
differentiation_visitor.hpp:29
LMCAS::DifferentiationVisitor::differentiate_atan2
void differentiate_atan2(const FunctionNode &node)
定义
differentiation_functions.cpp:264
LMCAS::DifferentiationVisitor::get_result
std::shared_ptr< const SymbolicNode > get_result() const
获取求导结果。
定义
differentiation_visitor.hpp:37
LMCAS::DifferentiationVisitor::append_result
void append_result(std::vector< std::shared_ptr< const SymbolicNode > > &nodes, std::size_t &size, std::shared_ptr< const SymbolicNode > candidate)
定义
differentiation_visitor.hpp:70
LMCAS::DifferentiationVisitor::visit
void visit(const NumberNode &) override
定义
differentiation_arithmetic.cpp:5
LMCAS::DifferentiationVisitor::set_result
void set_result(std::shared_ptr< const SymbolicNode > candidate)
定义
differentiation_visitor.hpp:66
LMCAS::FiniteSetNode
定义
sets.hpp:142
LMCAS::FunctionNode
函数节点,表示数学函数调用(三角函数、对数、特殊函数等)。
定义
functions.hpp:10
LMCAS::IntegralNode
定义
integral.hpp:8
LMCAS::IntervalNode
定义
sets.hpp:204
LMCAS::LimitNode
定义
special_forms.hpp:12
LMCAS::LogicalNode
定义
relations.hpp:73
LMCAS::MatrixNode
矩阵节点,支持稠密和稀疏两种存储方式。
定义
matrix.hpp:12
LMCAS::MembershipNode
定义
sets.hpp:248
LMCAS::MultiplyNode
乘法节点,表示多个操作数的乘积。
定义
arithmetic.hpp:134
LMCAS::NumberNode
定义
numbers.hpp:8
LMCAS::PiecewiseNode
分段函数节点,表示条件分支表达式.
定义
bindings.hpp:12
LMCAS::PowerNode
幂运算节点,表示 base^exponent。
定义
arithmetic.hpp:218
LMCAS::ProductNode
连乘节点,表示符号有限/无限连乘 prod_{k=a}^{b} f(k).
定义
bindings.hpp:175
LMCAS::QuantifierNode
定义
sets.hpp:5
LMCAS::QuantityNode
定义
sets.hpp:286
LMCAS::RelationalNode
定义
relations.hpp:6
LMCAS::RootOfNode
定义
special_forms.hpp:76
LMCAS::SetBuilderNode
定义
sets.hpp:80
LMCAS::SummationNode
求和节点,表示符号有限/无限求和 sum_{k=a}^{b} f(k).
定义
bindings.hpp:101
LMCAS::TransformNode
积分变换节点,表示 Laplace,Fourier,Z 变换及其逆变换.
定义
bindings.hpp:251
LMCAS::UninterpretedFunctionNode
定义
functions.hpp:96
LMCAS::VariableNode
变量节点,表示一个符号变量。
定义
arithmetic.hpp:10
LMCAS::detail::RewriteBudget
定义
rewrite_budget.hpp:15
LMCAS::detail::RewriteBudget::append_size
std::size_t append_size(std::size_t current, std::size_t child)
定义
rewrite_budget.cpp:188
LMCAS::detail::RewriteBudget::measure_result
std::size_t measure_result(const std::shared_ptr< const SymbolicNode > &node)
定义
rewrite_budget.cpp:183
LMCAS::detail::SymbolicVisitor
定义
base.hpp:216
LMCAS::detail::SymbolicVisitor::SymbolicVisitor
SymbolicVisitor()=default
LMCAS::detail::SymbolicVisitor::rewrite_budget
RewriteBudget * rewrite_budget() const noexcept
定义
base.hpp:220
LMCAS
定义
assumption.hpp:11
LMCAS::v
__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
定义
vector_calculus_surfaces.hpp:59
LMCAS::CasErrc::UnsupportedExpression
@ UnsupportedExpression
定义
result.hpp:23
LMCAS::CasError
定义
result.hpp:31
symbolic_ast.hpp
内部 AST 定义。
src
internal
visitors
differentiation_visitor.hpp
生成于
, 为 LMCAS使用
1.18.0