|
LMCAS
Lamina Computer Algebra System
|
矩阵节点,支持稠密和稀疏两种存储方式。 更多...
#include </home/runner/work/docs/docs/LMCAS/src/internal/symbolic_ast/matrix.hpp>
Public 类型 | |
| using | DenseStorage = std::vector<std::shared_ptr<const SymbolicNode>> |
| 稠密存储,按行优先展开。 | |
| using | SparseStorage = std::map<size_t, std::shared_ptr<const SymbolicNode>> |
| 稀疏存储,索引映射到节点。 | |
Public 成员函数 | |
| void | accept (LMCAS::detail::SymbolicVisitor &visitor) const override |
| std::shared_ptr< const SymbolicNode > | clone () const override |
| size_t | cols () const noexcept |
| int | compare (const SymbolicNode &other) const |
| 与另一个节点进行全序比较. | |
| bool | equals (const SymbolicNode &other) const |
| 判断两个节点是否结构相等. | |
| std::shared_ptr< const SymbolicNode > | get (size_t r, size_t c) const |
| 获取指定位置的矩阵元素。 | |
| std::size_t | hash () const |
| 获取节点哈希值(带缓存). | |
| virtual bool | is_number () const |
| virtual bool | is_one () const |
| virtual bool | is_positive () const |
| bool | is_sparse () const |
| virtual bool | is_zero () const |
| size_t | rows () const noexcept |
| const std::variant< DenseStorage, SparseStorage > & | storage () const noexcept |
| int | type_priority () const override |
静态 Public 成员函数 | |
| static std::variant< DenseStorage, SparseStorage > | create_storage_from_grid (const std::vector< std::vector< std::shared_ptr< const SymbolicNode > > > &grid, size_t total_elements, size_t ncols) |
| 根据稀疏度选择存储方式,从二维网格创建存储。 | |
| static DenseStorage | validate_dense_storage (size_t r, size_t c, DenseStorage dense) |
| static size_t | validate_grid_columns (const std::vector< std::vector< std::shared_ptr< const SymbolicNode > > > &grid) |
| 验证并返回网格的列数(要求各行列数一致)。 | |
| static SparseStorage | validate_sparse_storage (size_t r, size_t c, SparseStorage sparse) |
Protected 成员函数 | |
| int | compare_same_type (const SymbolicNode &other) const override |
| std::size_t | compute_hash () const override |
Protected 属性 | |
| std::atomic< std::size_t > | cached_hash {0} |
| std::atomic< bool > | hash_computed {false} |
Private 成员函数 | |
| MatrixNode (const std::vector< std::vector< std::shared_ptr< const SymbolicNode > > > &grid) | |
| MatrixNode (size_t r, size_t c, DenseStorage dense) | |
| MatrixNode (size_t r, size_t c, SparseStorage sparse) | |
Private 属性 | |
| const size_t | cols_ |
| LMCAS_AST_NODE_FACTORY_FRIEND | |
| const size_t | rows_ |
| const std::variant< DenseStorage, SparseStorage > | storage_ |
| using LMCAS::MatrixNode::DenseStorage = std::vector<std::shared_ptr<const SymbolicNode>> |
稠密存储,按行优先展开。
在文件 matrix.hpp 第 14 行定义.
| using LMCAS::MatrixNode::SparseStorage = std::map<size_t, std::shared_ptr<const SymbolicNode>> |
稀疏存储,索引映射到节点。
在文件 matrix.hpp 第 15 行定义.
|
inlineprivate |
在文件 matrix.hpp 第 103 行定义.
引用了 cols_, create_storage_from_grid(), rows_, storage_ , 以及 validate_grid_columns().
被这些函数引用 compare_same_type().
|
inlineprivate |
在文件 matrix.hpp 第 108 行定义.
引用了 LMCAS::c, cols_, LMCAS::r, rows_, storage_ , 以及 validate_dense_storage().
|
inlineprivate |
在文件 matrix.hpp 第 111 行定义.
引用了 LMCAS::c, cols_, LMCAS::r, rows_, storage_ , 以及 validate_sparse_storage().
|
inlineoverridevirtual |
实现了 LMCAS::SymbolicNode.
在文件 matrix.hpp 第 154 行定义.
引用了 LMCAS::detail::SymbolicVisitor::visit().
|
inlineoverridevirtual |
实现了 LMCAS::SymbolicNode.
在文件 matrix.hpp 第 156 行定义.
引用了 cols_, LMCAS::e(), LMCAS::detail::make_node(), rows_ , 以及 storage_.
|
inlinenoexcept |
在文件 matrix.hpp 第 116 行定义.
引用了 cols_.
被这些函数引用 LMCAS::anonymous_namespace{symbolic_matrix_eigen.cpp}::eigenvalue_nullspace(), LMCAS::detail::matrix_api::exact_matrix_data(), LMCAS::anonymous_namespace{matrix_decomposition_eigen.cpp}::jordan_dimensions_match(), LMCAS::anonymous_namespace{matrix_decomposition.cpp}::matrix_axis_sum(), LMCAS::NormalizationVisitor::matrix_product_element(), LMCAS::anonymous_namespace{matrix_decomposition.cpp}::maximum_axis_sum(), LMCAS::NormalizationVisitor::scale_matrix(), LMCAS::anonymous_namespace{matrix_decomposition_eigen.cpp}::verify_jordan_identity() , 以及 LMCAS::anonymous_namespace{expr_serialization.cpp}::Writer::visit().
|
inlineinherited |
与另一个节点进行全序比较.
| other | 待比较的节点 |
引用了 SymbolicNode(), compare_same_type() , 以及 type_priority().
被这些函数引用 LMCAS::anonymous_namespace{symbolic_cancel.cpp}::combine_fraction_terms() , 以及 LMCAS::endpoints_equivalent().
|
overrideprotectedvirtual |
实现了 LMCAS::SymbolicNode.
在文件 symbolic_node_order.cpp 第 24 行定义.
引用了 MatrixNode(), LMCAS::SymbolicNode::SymbolicNode(), cols_, get() , 以及 rows_.
|
inlineoverrideprotectedvirtual |
实现了 LMCAS::SymbolicNode.
在文件 matrix.hpp 第 124 行定义.
引用了 cols_, LMCAS::SymbolicNode::hash(), LMCAS::hash_combine(), LMCAS::SymbolicNode::is_zero(), rows_, storage_ , 以及 type_priority().
|
inlinestatic |
根据稀疏度选择存储方式,从二维网格创建存储。
| grid | 二维节点网格 |
| total_elements | 总元素数 |
| ncols | 列数 |
在文件 matrix.hpp 第 222 行定义.
被这些函数引用 MatrixNode().
|
inlineinherited |
判断两个节点是否结构相等.
| other | 待比较的节点 |
引用了 SymbolicNode(), compare_same_type(), hash() , 以及 type_priority().
被这些函数引用 LMCAS::complementary_square(), LMCAS::anonymous_namespace{relation_store.cpp}::expr_equals(), LMCAS::match_recursive(), LMCAS::tf_remove_exp_factor() , 以及 LMCAS::tf_substitute_expr().
|
inline |
获取指定位置的矩阵元素。
| r | 行索引(从 0 开始) |
| c | 列索引(从 0 开始) |
在文件 matrix.hpp 第 181 行定义.
引用了 LMCAS::c, cols_, LMCAS::detail::make_node(), LMCAS::r, rows_ , 以及 storage_.
被这些函数引用 compare_same_type(), LMCAS::anonymous_namespace{symbolic_matrix_eigen.cpp}::eigenvalue_nullspace(), LMCAS::detail::matrix_api::exact_matrix_data(), LMCAS::anonymous_namespace{matrix_decomposition.cpp}::matrix_axis_sum() , 以及 LMCAS::anonymous_namespace{expr_serialization.cpp}::Writer::visit().
|
inlineinherited |
获取节点哈希值(带缓存).
引用了 cached_hash, compute_hash() , 以及 hash_computed.
被这些函数引用 LMCAS::MatrixNode::compute_hash(), LMCAS::VariableNode::compute_hash() , 以及 equals().
|
inlinevirtualinherited |
|
inlinevirtualinherited |
|
inlinevirtualinherited |
|
inline |
|
inlinevirtualinherited |
被 LMCAS::ComplexNode , 以及 LMCAS::NumberNode 重载.
被这些函数引用 LMCAS::complex_div_checked(), LMCAS::MatrixNode::compute_hash(), LMCAS::anonymous_namespace{expr_number_domains.cpp}::domain_contains_complex(), LMCAS::is_analytic_impl(), LMCAS::is_euler_equation(), LMCAS::anonymous_namespace{matrix_quadratic_form.cpp}::reconstructs_expression(), LMCAS::anonymous_namespace{complex_analysis.cpp}::split_real_imag() , 以及 LMCAS::symbolic_poly_to_expr().
|
inlinenoexcept |
在文件 matrix.hpp 第 115 行定义.
引用了 rows_.
被这些函数引用 LMCAS::anonymous_namespace{symbolic_matrix_eigen.cpp}::eigenvalue_nullspace(), LMCAS::detail::matrix_api::exact_matrix_data(), LMCAS::anonymous_namespace{matrix_decomposition_eigen.cpp}::jordan_dimensions_match(), LMCAS::anonymous_namespace{matrix_decomposition.cpp}::matrix_axis_sum(), LMCAS::anonymous_namespace{matrix_decomposition.cpp}::maximum_axis_sum(), LMCAS::NormalizationVisitor::scale_matrix(), LMCAS::anonymous_namespace{matrix_decomposition_eigen.cpp}::verify_jordan_identity() , 以及 LMCAS::anonymous_namespace{expr_serialization.cpp}::Writer::visit().
|
inlinenoexcept |
在文件 matrix.hpp 第 117 行定义.
引用了 storage_.
被这些函数引用 LMCAS::anonymous_namespace{normalization_matrices.cpp}::matrix_element() , 以及 LMCAS::NormalizationVisitor::matrix_product_element().
|
inlineoverridevirtual |
实现了 LMCAS::SymbolicNode.
在文件 matrix.hpp 第 121 行定义.
被这些函数引用 compute_hash().
|
inlinestatic |
在文件 matrix.hpp 第 49 行定义.
被这些函数引用 MatrixNode().
|
inlinestatic |
验证并返回网格的列数(要求各行列数一致)。
| grid | 二维节点网格 |
| std::invalid_argument | 各行列数不一致时抛出 |
在文件 matrix.hpp 第 23 行定义.
被这些函数引用 MatrixNode().
|
inlinestatic |
在文件 matrix.hpp 第 67 行定义.
被这些函数引用 MatrixNode().
|
mutableprotectedinherited |
被这些函数引用 SymbolicNode() , 以及 hash().
|
private |
在文件 matrix.hpp 第 100 行定义.
被这些函数引用 MatrixNode(), MatrixNode(), MatrixNode(), clone(), cols(), compare_same_type(), compute_hash() , 以及 get().
|
mutableprotectedinherited |
被这些函数引用 SymbolicNode() , 以及 hash().
|
private |
在文件 matrix.hpp 第 97 行定义.
|
private |
在文件 matrix.hpp 第 99 行定义.
被这些函数引用 MatrixNode(), MatrixNode(), MatrixNode(), clone(), compare_same_type(), compute_hash(), get() , 以及 rows().
|
private |
在文件 matrix.hpp 第 101 行定义.
被这些函数引用 MatrixNode(), MatrixNode(), MatrixNode(), clone(), compute_hash(), get(), is_sparse() , 以及 storage().