LMCAS
Lamina Computer Algebra System
Toggle main menu visibility
载入中...
搜索中...
未找到
symbolic_node_order.cpp
浏览该文件的文档.
1
#include "
internal/symbolic_ast.hpp
"
2
3
namespace
LMCAS
{
4
namespace
{
5
6
int
compare_matrix_elements
(
const
std::shared_ptr<const SymbolicNode>& left,
7
const
std::shared_ptr<const SymbolicNode>&
right
) {
8
const
bool
left_zero = !left || left->is_zero();
9
const
bool
right_zero = !
right
||
right
->is_zero();
10
if
(left_zero && right_zero) {
11
return
0;
12
}
13
if
(left_zero) {
14
return
-1;
15
}
16
if
(right_zero) {
17
return
1;
18
}
19
return
left->compare(*
right
);
20
}
21
22
}
23
24
int
MatrixNode::compare_same_type
(
const
SymbolicNode
& other)
const
{
25
const
auto
& matrix =
static_cast<
const
MatrixNode
&
>
(other);
26
if
(
rows_
!= matrix.rows_) {
27
return
rows_
< matrix.rows_ ? -1 : 1;
28
}
29
if
(
cols_
!= matrix.cols_) {
30
return
cols_
< matrix.cols_ ? -1 : 1;
31
}
32
for
(
size_t
row = 0; row <
rows_
; ++row) {
33
for
(
size_t
column = 0; column <
cols_
; ++column) {
34
const
int
comparison = compare_matrix_elements(
get
(row, column), matrix.get(row, column));
35
if
(comparison != 0) {
36
return
comparison;
37
}
38
}
39
}
40
return
0;
41
}
42
43
int
IntervalNode::compare_same_type
(
const
SymbolicNode
& other)
const
{
44
const
auto
&
interval
=
static_cast<
const
IntervalNode
&
>
(other);
45
int
comparison =
lower_
->compare(*
interval
.lower_);
46
if
(comparison != 0) {
47
return
comparison;
48
}
49
comparison =
upper_
->compare(*
interval
.upper_);
50
if
(comparison != 0) {
51
return
comparison;
52
}
53
if
(
lower_closed_
!=
interval
.lower_closed_) {
54
return
lower_closed_
? 1 : -1;
55
}
56
if
(
upper_closed_
!=
interval
.upper_closed_) {
57
return
upper_closed_
? 1 : -1;
58
}
59
return
0;
60
}
61
62
}
LMCAS::IntervalNode::compare_same_type
int compare_same_type(const SymbolicNode &other) const override
定义
symbolic_node_order.cpp:43
LMCAS::IntervalNode::lower_
const std::shared_ptr< const SymbolicNode > lower_
定义
sets.hpp:207
LMCAS::IntervalNode::lower_closed_
const bool lower_closed_
定义
sets.hpp:209
LMCAS::IntervalNode::upper_closed_
const bool upper_closed_
定义
sets.hpp:210
LMCAS::IntervalNode::IntervalNode
IntervalNode(std::shared_ptr< const SymbolicNode > lower, std::shared_ptr< const SymbolicNode > upper, bool lower_closed, bool upper_closed)
定义
sets.hpp:212
LMCAS::IntervalNode::upper_
const std::shared_ptr< const SymbolicNode > upper_
定义
sets.hpp:208
LMCAS::MatrixNode::rows_
const size_t rows_
定义
matrix.hpp:99
LMCAS::MatrixNode::cols_
const size_t cols_
定义
matrix.hpp:100
LMCAS::MatrixNode::MatrixNode
MatrixNode(const std::vector< std::vector< std::shared_ptr< const SymbolicNode > > > &grid)
定义
matrix.hpp:103
LMCAS::MatrixNode::get
std::shared_ptr< const SymbolicNode > get(size_t r, size_t c) const
获取指定位置的矩阵元素。
定义
matrix.hpp:181
LMCAS::MatrixNode::compare_same_type
int compare_same_type(const SymbolicNode &other) const override
定义
symbolic_node_order.cpp:24
LMCAS::SymbolicNode::SymbolicNode
SymbolicNode()=default
LMCAS::anonymous_namespace{symbolic_node_order.cpp}::compare_matrix_elements
int compare_matrix_elements(const std::shared_ptr< const SymbolicNode > &left, const std::shared_ptr< const SymbolicNode > &right)
定义
symbolic_node_order.cpp:6
LMCAS
定义
assumption.hpp:11
LMCAS::interval
ExprResult interval(ExprPtr lower, ExprPtr upper, bool lower_closed, bool upper_closed)
定义
expr_facade.cpp:168
LMCAS::right
const ExprPtr & right
定义
residual_verification.hpp:50
symbolic_ast.hpp
内部 AST 定义。
src
symbolic_node_order.cpp
生成于
, 为 LMCAS使用
1.18.0