LMCAS
Lamina Computer Algebra System
载入中...
搜索中...
未找到
LMCAS::detail::matrix_kernel 命名空间参考

函数

Result< std::optional< std::size_t > > choose_pivot (const ExactMatrixData &matrix, std::size_t first_row, std::size_t column, ComputationContext &context, const std::string &operation)
ExprPtr exact_add (const ExprPtr &left, const ExprPtr &right, ComputationContext &context)
ExprPtr exact_divide (const ExprPtr &numerator, const ExprPtr &denominator, ComputationContext &context)
ExprPtr exact_multiply (const ExprPtr &left, const ExprPtr &right, ComputationContext &context)
ExprPtr exact_negate (const ExprPtr &expression, ComputationContext &context)
std::optional< Rational > exact_rational (const ExprPtr &expression)
ExprPtr exact_subtract (const ExprPtr &left, const ExprPtr &right, ComputationContext &context)
ExprPtr simplify_expr (ExprPtr expression, ComputationContext &context)
void swap_rows (ExactMatrixData &matrix, std::size_t first, std::size_t second)
Result< void > validate_matrix (const ExactMatrixData &matrix, const std::string &operation)

函数说明

◆ choose_pivot()

Result< std::optional< std::size_t > > LMCAS::detail::matrix_kernel::choose_pivot ( const ExactMatrixData & matrix,
std::size_t first_row,
std::size_t column,
ComputationContext & context,
const std::string & operation )

在文件 exact_matrix_support.cpp 第 84 行定义.

89 {
90 bool saw_unknown = false;
91 for (std::size_t row = first_row; row < matrix.rows; ++row) {
92 auto proof = classify_exact_zero(matrix.at(row, column), context, operation);
93 if (!proof) {
94 return Result<std::optional<std::size_t>>::failure(proof.error());
95 }
96 if (proof.value() == ZeroProof::NonZero) {
97 return Result<std::optional<std::size_t>>::success(row);
98 }
99 saw_unknown = saw_unknown || proof.value() == ZeroProof::Unknown;
100 }
101 if (saw_unknown) {
102 return Result<std::optional<std::size_t>>::failure(
104 "exact pivot is not provably zero or non-zero", operation);
105 }
106 return Result<std::optional<std::size_t>>::success(std::nullopt);
107}
Result< ZeroProof > classify_exact_zero(const ExprPtr &expression, ComputationContext &context, const std::string &operation)
ComputationContext const std::string & operation
std::size_t std::size_t ComputationContext & context
const ExprPtr & at(std::size_t row, std::size_t col) const

引用了 LMCAS::detail::ExactMatrixData::at(), choose_pivot(), LMCAS::detail::classify_exact_zero(), LMCAS::detail::context, LMCAS::Inconclusive, LMCAS::detail::NonZero, LMCAS::detail::operation, LMCAS::detail::ExactMatrixData::rows , 以及 LMCAS::detail::Unknown.

被这些函数引用 choose_pivot(), LMCAS::detail::anonymous_namespace{exact_matrix.cpp}::eliminate_forward() , 以及 LMCAS::detail::anonymous_namespace{exact_matrix_determinant.cpp}::symbolic_determinant_value().

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

◆ exact_add()

ExprPtr LMCAS::detail::matrix_kernel::exact_add ( const ExprPtr & left,
const ExprPtr & right,
ComputationContext & context )

在文件 exact_matrix_support.cpp 第 54 行定义.

54 {
55 return simplify_expr(SymbolicExpr::add(left, right), context);
56}
ExprPtr simplify_expr(ExprPtr expression, ComputationContext &context)
const ExprPtr & right

引用了 LMCAS::detail::context, exact_add(), LMCAS::right , 以及 simplify_expr().

被这些函数引用 LMCAS::detail::anonymous_namespace{exact_matrix_determinant.cpp}::determinant_cofactor(), exact_add() , 以及 exact_subtract().

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

◆ exact_divide()

ExprPtr LMCAS::detail::matrix_kernel::exact_divide ( const ExprPtr & numerator,
const ExprPtr & denominator,
ComputationContext & context )

在文件 exact_matrix_support.cpp 第 71 行定义.

71 {
72 return simplify_expr(SymbolicExpr::divide(numerator, denominator), context);
73}
const ExprPtr & denominator

引用了 LMCAS::detail::context, LMCAS::denominator, exact_divide() , 以及 simplify_expr().

被这些函数引用 LMCAS::detail::anonymous_namespace{exact_matrix.cpp}::eliminate_below(), exact_divide(), LMCAS::detail::anonymous_namespace{exact_matrix.cpp}::reduce_above() , 以及 LMCAS::detail::anonymous_namespace{exact_matrix_determinant.cpp}::symbolic_determinant_value().

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

◆ exact_multiply()

ExprPtr LMCAS::detail::matrix_kernel::exact_multiply ( const ExprPtr & left,
const ExprPtr & right,
ComputationContext & context )

在文件 exact_matrix_support.cpp 第 67 行定义.

67 {
68 return simplify_expr(SymbolicExpr::multiply(left, right), context);
69}

引用了 LMCAS::detail::context, exact_multiply(), LMCAS::right , 以及 simplify_expr().

被这些函数引用 LMCAS::detail::anonymous_namespace{exact_matrix_determinant.cpp}::determinant_cofactor(), exact_multiply(), LMCAS::detail::anonymous_namespace{exact_matrix.cpp}::subtract_pivot_row() , 以及 LMCAS::detail::anonymous_namespace{exact_matrix_determinant.cpp}::symbolic_determinant_value().

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

◆ exact_negate()

ExprPtr LMCAS::detail::matrix_kernel::exact_negate ( const ExprPtr & expression,
ComputationContext & context )

在文件 exact_matrix_support.cpp 第 58 行定义.

58 {
59 return simplify_expr(SymbolicExpr::multiply(
60 SymbolicExpr::number(-1), expression), context);
61}

引用了 LMCAS::detail::context, exact_negate() , 以及 simplify_expr().

被这些函数引用 LMCAS::detail::anonymous_namespace{exact_matrix_determinant.cpp}::determinant_cofactor(), exact_negate(), exact_subtract(), LMCAS::detail::nullspace_exact(), LMCAS::detail::solve_linear_exact() , 以及 LMCAS::detail::anonymous_namespace{exact_matrix_determinant.cpp}::symbolic_determinant_value().

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

◆ exact_rational()

std::optional< Rational > LMCAS::detail::matrix_kernel::exact_rational ( const ExprPtr & expression)

在文件 exact_matrix_support.cpp 第 36 行定义.

36 {
37 if (!expression || !node(expression)) {
38 return std::nullopt;
39 }
40 return exact_rational_value(node(expression));
41}
const SymbolicNodePtr & node(const ::LMCAS::SymbolicExpr &expression) noexcept
std::optional< Rational > exact_rational_value(const NumberNode &number)

引用了 exact_rational(), LMCAS::detail::exact_rational_value() , 以及 LMCAS::detail::node().

被这些函数引用 LMCAS::detail::anonymous_namespace{exact_matrix_support.cpp}::classify_numeric_power(), LMCAS::detail::anonymous_namespace{exact_matrix_support.cpp}::classify_numeric_sqrt(), LMCAS::detail::anonymous_namespace{exact_matrix_support.cpp}::classify_numeric_value(), LMCAS::detail::anonymous_namespace{exact_matrix_determinant.cpp}::determinant_cofactor(), LMCAS::detail::determinant_exact(), exact_rational(), LMCAS::detail::anonymous_namespace{exact_matrix_determinant.cpp}::rational_determinant(), LMCAS::detail::anonymous_namespace{exact_matrix_solve.cpp}::rational_linear_solve() , 以及 LMCAS::detail::solve_linear_exact().

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

◆ exact_subtract()

ExprPtr LMCAS::detail::matrix_kernel::exact_subtract ( const ExprPtr & left,
const ExprPtr & right,
ComputationContext & context )

在文件 exact_matrix_support.cpp 第 63 行定义.

63 {
65}
ExprPtr exact_negate(const ExprPtr &expression, ComputationContext &context)
ExprPtr exact_add(const ExprPtr &left, const ExprPtr &right, ComputationContext &context)

引用了 LMCAS::detail::context, exact_add(), exact_negate(), exact_subtract() , 以及 LMCAS::right.

被这些函数引用 exact_subtract(), LMCAS::detail::anonymous_namespace{exact_matrix.cpp}::subtract_pivot_row() , 以及 LMCAS::detail::anonymous_namespace{exact_matrix_determinant.cpp}::symbolic_determinant_value().

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

◆ simplify_expr()

ExprPtr LMCAS::detail::matrix_kernel::simplify_expr ( ExprPtr expression,
ComputationContext & context )

在文件 exact_matrix_support.cpp 第 43 行定义.

43 {
44
45 detail::RewriteBudget transform_budget(context, (context).limits().max_recursion_depth,
46 (context).limits().max_ast_nodes, "transform");
47 if (!expression) {
48 return expression;
49 }
50 auto simplified = detail::make_expression_ptr(detail::normalize_node(detail::node(expression), transform_budget));
51 return simplified ? simplified : expression;
52}
std::shared_ptr<::LMCAS::SymbolicExpr > make_expression_ptr(SymbolicNodePtr root)
SymbolicNodePtr normalize_node(const SymbolicNodePtr &node, RewriteBudget &budget, const FactsQuery &facts, Domain domain)

引用了 LMCAS::detail::context, LMCAS::detail::make_expression_ptr(), LMCAS::detail::node(), LMCAS::detail::normalize_node() , 以及 simplify_expr().

被这些函数引用 LMCAS::detail::classify_exact_zero(), LMCAS::detail::anonymous_namespace{exact_matrix_determinant.cpp}::determinant_cofactor(), LMCAS::detail::anonymous_namespace{exact_matrix.cpp}::eliminate_forward(), exact_add(), exact_divide(), exact_multiply(), exact_negate(), LMCAS::detail::anonymous_namespace{exact_matrix.cpp}::reduce_above(), simplify_expr() , 以及 LMCAS::detail::anonymous_namespace{exact_matrix_determinant.cpp}::symbolic_determinant_value().

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

◆ swap_rows()

void LMCAS::detail::matrix_kernel::swap_rows ( ExactMatrixData & matrix,
std::size_t first,
std::size_t second )

在文件 exact_matrix_support.cpp 第 75 行定义.

75 {
76 if (first == second) {
77 return;
78 }
79 for (std::size_t column = 0; column < matrix.cols; ++column) {
80 std::swap(matrix.at(first, column), matrix.at(second, column));
81 }
82}

引用了 LMCAS::detail::ExactMatrixData::at(), LMCAS::detail::ExactMatrixData::cols , 以及 swap_rows().

被这些函数引用 LMCAS::detail::anonymous_namespace{exact_matrix.cpp}::eliminate_forward(), swap_rows() , 以及 LMCAS::detail::anonymous_namespace{exact_matrix_determinant.cpp}::symbolic_determinant_value().

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

◆ validate_matrix()

Result< void > LMCAS::detail::matrix_kernel::validate_matrix ( const ExactMatrixData & matrix,
const std::string & operation )

在文件 exact_matrix_support.cpp 第 12 行定义.

14 {
15 if (matrix.rows == 0 || matrix.cols == 0) {
18 "exact matrix dimensions must be non-zero", operation);
19 }
20 if (matrix.rows > std::numeric_limits<std::size_t>::max() / matrix.cols ||
21 matrix.entries.size() != matrix.rows * matrix.cols) {
24 "exact matrix storage does not match its dimensions", operation);
25 }
26 for (const auto& entry : matrix.entries) {
27 if (!entry || !node(entry)) {
30 "exact matrix entries cannot be null", operation);
31 }
32 }
33 return Result<void>::success();
34}
static Result failure(CasErrc code, std::string message, std::string operation={})
static Result success(T value)

引用了 LMCAS::detail::ExactMatrixData::cols, LMCAS::detail::ExactMatrixData::entries, LMCAS::Result< T >::failure(), LMCAS::InvalidArgument, LMCAS::detail::node(), LMCAS::detail::operation, LMCAS::detail::ExactMatrixData::rows, LMCAS::Result< T >::success() , 以及 validate_matrix().

被这些函数引用 LMCAS::detail::determinant_exact(), LMCAS::detail::eliminate_exact(), LMCAS::detail::inverse_exact(), LMCAS::detail::nullspace_exact(), LMCAS::detail::solve_linear_exact() , 以及 validate_matrix().

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