LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
LMCAS::anonymous_namespace{matrix_decomposition.cpp} 命名空间参考

类

struct  NormSum

函数

std::shared_ptr< SymbolicExpr > abs_expression (const std::shared_ptr< SymbolicExpr > &e)
NormSum matrix_axis_sum (const MatrixNode &matrix, std::size_t axis, bool columns, ComputationContext &context)
std::shared_ptr< SymbolicExpr > maximum_axis_sum (const MatrixNode &matrix, bool columns, ComputationContext &context)

类说明

◆ LMCAS::anonymous_namespace{matrix_decomposition.cpp}::NormSum

struct LMCAS::anonymous_namespace{matrix_decomposition.cpp}::NormSum

在文件 matrix_decomposition.cpp 第 16 行定义.

LMCAS::anonymous_namespace{matrix_decomposition.cpp}::NormSum 的协作图:
类成员
optional< Rational > exact
shared_ptr< SymbolicExpr > expression

函数说明

◆ abs_expression()

std::shared_ptr< SymbolicExpr > LMCAS::anonymous_namespace{matrix_decomposition.cpp}::abs_expression ( const std::shared_ptr< SymbolicExpr > & e)

在文件 matrix_decomposition.cpp 第 10 行定义.

10 {
12 std::vector<std::shared_ptr<const SymbolicNode>>{detail::node(e)});
13 return detail::make_expression_ptr(node);
14}
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)
ExprResult e()

引用了 LMCAS::FunctionNode::Abs, abs_expression(), LMCAS::e(), LMCAS::detail::make_expression_ptr(), LMCAS::detail::make_node() , 以及 LMCAS::detail::node().

被这些函数引用 abs_expression() , 以及 matrix_axis_sum().

函数调用图:
这是这个函数的调用关系图:

◆ matrix_axis_sum()

NormSum LMCAS::anonymous_namespace{matrix_decomposition.cpp}::matrix_axis_sum ( const MatrixNode & matrix,
std::size_t axis,
bool columns,
ComputationContext & context )

在文件 matrix_decomposition.cpp 第 21 行定义.

21 {
22
23 detail::RewriteBudget transform_budget(context, (context).limits().max_recursion_depth,
24 (context).limits().max_ast_nodes, "transform");
25 auto sum = SymbolicExpr::number(0);
26 std::optional<Rational> exact_sum = Rational(0);
27 const auto count = columns ? matrix.rows() : matrix.cols();
28 for (std::size_t index = 0; index < count; ++index) {
29 auto entry = detail::make_expression_ptr(columns
30 ? matrix.get(index, axis) : matrix.get(axis, index));
31 sum = SymbolicExpr::add(sum, abs_expression(entry));
32 if (exact_sum) {
33 auto exact_entry = exact_rational_expr(entry, context);
34 if (exact_entry) {
35 *exact_sum = *exact_sum + ((*exact_entry < Rational(0))
36 ? (Rational(0) - *exact_entry) : *exact_entry);
37 } else {
38 exact_sum.reset();
39 }
40 }
41 }
43 return {sum, exact_sum ? exact_sum : exact_rational_expr(sum, context)};
44}
size_t cols() const noexcept
size_t rows() const noexcept
std::shared_ptr< const SymbolicNode > get(size_t r, size_t c) const
获取指定位置的矩阵元素。
std::shared_ptr< SymbolicExpr > abs_expression(const std::shared_ptr< SymbolicExpr > &e)
std::optional< Rational > exact_rational_expr(const std::shared_ptr< const SymbolicNode > &node)
SymbolicNodePtr normalize_node(const SymbolicNodePtr &node, RewriteBudget &budget, const FactsQuery &facts, Domain domain)
const std::vector< Polynomial< BigInt > > const BigInt ComputationContext & context

引用了 abs_expression(), LMCAS::MatrixNode::cols(), LMCAS::context, LMCAS::detail::matrix_decomposition::exact_rational_expr(), LMCAS::MatrixNode::get(), LMCAS::detail::make_expression_ptr(), matrix_axis_sum(), LMCAS::detail::node(), LMCAS::detail::normalize_node() , 以及 LMCAS::MatrixNode::rows().

被这些函数引用 matrix_axis_sum() , 以及 maximum_axis_sum().

函数调用图:
这是这个函数的调用关系图:

◆ maximum_axis_sum()

std::shared_ptr< SymbolicExpr > LMCAS::anonymous_namespace{matrix_decomposition.cpp}::maximum_axis_sum ( const MatrixNode & matrix,
bool columns,
ComputationContext & context )

在文件 matrix_decomposition.cpp 第 46 行定义.

46 {
47 std::optional<Rational> maximum_exact;
48 std::vector<std::shared_ptr<const SymbolicNode>> candidates;
49 const auto count = columns ? matrix.cols() : matrix.rows();
50 for (std::size_t axis = 0; axis < count; ++axis) {
51 auto candidate = matrix_axis_sum(matrix, axis, columns, context);
52 if (candidate.exact) {
53 if (!maximum_exact || *candidate.exact > *maximum_exact)
54 maximum_exact = *candidate.exact;
55 } else {
56 candidates.push_back(detail::node(candidate.expression));
57 }
58 }
59 if (maximum_exact)
60 candidates.push_back(detail::node(exact_number_expr(*maximum_exact)));
61 if (candidates.empty()) return nullptr;
62 if (candidates.size() == 1) return detail::make_expression_ptr(candidates.front());
64 FunctionNode::FuncType::Max, std::move(candidates)));
65}
@ Max
最大值 max(a, b)。
NormSum matrix_axis_sum(const MatrixNode &matrix, std::size_t axis, bool columns, ComputationContext &context)
std::shared_ptr< SymbolicExpr > exact_number_expr(const Rational &value)

引用了 LMCAS::MatrixNode::cols(), LMCAS::context, LMCAS::detail::matrix_decomposition::exact_number_expr(), LMCAS::detail::make_expression_ptr(), LMCAS::detail::make_node(), matrix_axis_sum(), LMCAS::FunctionNode::Max, maximum_axis_sum(), LMCAS::detail::node() , 以及 LMCAS::MatrixNode::rows().

被这些函数引用 maximum_axis_sum().

函数调用图:
这是这个函数的调用关系图: