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

函数

Result< void > eliminate_below (ExactMatrixData &matrix, std::size_t pivot_row, std::size_t column, const ExprPtr &pivot_value, ComputationContext &context, const std::string &operation)
Result< void > eliminate_forward (EliminationResult &result, std::size_t coefficient_columns, ComputationContext &context, const std::string &operation)
Result< void > reduce_above (EliminationResult &result, ComputationContext &context, const std::string &operation)
void subtract_pivot_row (ExactMatrixData &matrix, std::size_t row, std::size_t pivot_row, const ExprPtr &factor, ComputationContext &context)

函数说明

◆ eliminate_below()

Result< void > LMCAS::detail::anonymous_namespace{exact_matrix.cpp}::eliminate_below ( ExactMatrixData & matrix,
std::size_t pivot_row,
std::size_t column,
const ExprPtr & pivot_value,
ComputationContext & context,
const std::string & operation )

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

24 {
25 for (std::size_t row = pivot_row + 1; row < matrix.rows; ++row) {
26 auto proof = classify_exact_zero(matrix.at(row, column), context, operation);
27 if (!proof) return Result<void>::failure(proof.error());
28 if (proof.value() == ZeroProof::Zero) continue;
29 auto factor = exact_divide(matrix.at(row, column), pivot_value, context);
30 subtract_pivot_row(matrix, row, pivot_row, factor, context);
31 }
32 return Result<void>::success();
33}
static Result failure(CasErrc code, std::string message, std::string operation={})
static Result success(T value)
void subtract_pivot_row(ExactMatrixData &matrix, std::size_t row, std::size_t pivot_row, const ExprPtr &factor, ComputationContext &context)
ExprPtr exact_divide(const ExprPtr &numerator, const ExprPtr &denominator, ComputationContext &context)
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(), LMCAS::detail::classify_exact_zero(), LMCAS::detail::context, eliminate_below(), LMCAS::detail::matrix_kernel::exact_divide(), LMCAS::Result< T >::failure(), LMCAS::detail::operation, LMCAS::detail::ExactMatrixData::rows, subtract_pivot_row(), LMCAS::Result< T >::success() , 以及 LMCAS::detail::Zero.

被这些函数引用 eliminate_below() , 以及 eliminate_forward().

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

◆ eliminate_forward()

Result< void > LMCAS::detail::anonymous_namespace{exact_matrix.cpp}::eliminate_forward ( EliminationResult & result,
std::size_t coefficient_columns,
ComputationContext & context,
const std::string & operation )

在文件 exact_matrix.cpp 第 59 行定义.

61 {
62 std::size_t pivot_row = 0;
63 for (std::size_t column = 0;
64 column < coefficient_columns && pivot_row < result.matrix.rows;
65 ++column) {
66 auto pivot = choose_pivot(
67 result.matrix, pivot_row, column, context, operation);
68 if (!pivot) return Result<void>::failure(pivot.error());
69 if (!pivot.value()) continue;
70 if (*pivot.value() != pivot_row) {
71 swap_rows(result.matrix, *pivot.value(), pivot_row);
72 ++result.row_swaps;
73 }
74 auto pivot_value = simplify_expr(result.matrix.at(pivot_row, column), context);
75 result.pivot_columns.push_back(column);
76 result.pivot_values.push_back(pivot_value);
77 auto reduced = eliminate_below(
78 result.matrix, pivot_row, column, pivot_value, context, operation);
79 if (!reduced) return Result<void>::failure(reduced.error());
80 ++pivot_row;
81 }
82 result.rank = result.pivot_columns.size();
83 return Result<void>::success();
84}
Result< void > eliminate_below(ExactMatrixData &matrix, std::size_t pivot_row, std::size_t column, const ExprPtr &pivot_value, ComputationContext &context, const std::string &operation)
ExprPtr simplify_expr(ExprPtr expression, ComputationContext &context)
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)
void swap_rows(ExactMatrixData &matrix, std::size_t first, std::size_t second)
std::vector< std::size_t > pivot_columns

引用了 LMCAS::detail::ExactMatrixData::at(), LMCAS::detail::matrix_kernel::choose_pivot(), LMCAS::detail::context, eliminate_below(), eliminate_forward(), LMCAS::Result< T >::failure(), LMCAS::detail::EliminationResult::matrix, LMCAS::detail::operation, LMCAS::detail::EliminationResult::pivot_columns, LMCAS::detail::EliminationResult::pivot_values, LMCAS::detail::EliminationResult::rank, LMCAS::detail::EliminationResult::row_swaps, LMCAS::detail::ExactMatrixData::rows, LMCAS::detail::matrix_kernel::simplify_expr(), LMCAS::Result< T >::success() , 以及 LMCAS::detail::matrix_kernel::swap_rows().

被这些函数引用 eliminate_forward().

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

◆ reduce_above()

Result< void > LMCAS::detail::anonymous_namespace{exact_matrix.cpp}::reduce_above ( EliminationResult & result,
ComputationContext & context,
const std::string & operation )

在文件 exact_matrix.cpp 第 35 行定义.

36 {
37 for (std::size_t pivot_index = result.rank; pivot_index-- > 0;) {
38 const std::size_t row = pivot_index;
39 const std::size_t column = result.pivot_columns[pivot_index];
40 auto pivot_value = simplify_expr(result.matrix.at(row, column), context);
41 for (std::size_t target = 0; target < result.matrix.cols; ++target) {
42 result.matrix.at(row, target) = exact_divide(
43 result.matrix.at(row, target), pivot_value, context);
44 }
45 for (std::size_t upper = 0; upper < row; ++upper) {
46 auto proof = classify_exact_zero(
47 result.matrix.at(upper, column), context, operation);
48 if (!proof) return Result<void>::failure(proof.error());
49 if (proof.value() == ZeroProof::Zero) continue;
50 auto factor = result.matrix.at(upper, column);
51 subtract_pivot_row(result.matrix, upper, row, factor, context);
52 }
53 }
54 return Result<void>::success();
55}
__attribute__((visibility("default"))) ExprResult function(const std __attribute__((visibility("default"))) ExprResult finite_set(std ExprPtr upper
const ExprPtr & target

引用了 LMCAS::detail::ExactMatrixData::at(), LMCAS::detail::classify_exact_zero(), LMCAS::detail::ExactMatrixData::cols, LMCAS::detail::context, LMCAS::detail::matrix_kernel::exact_divide(), LMCAS::Result< T >::failure(), LMCAS::detail::EliminationResult::matrix, LMCAS::detail::operation, LMCAS::detail::EliminationResult::pivot_columns, LMCAS::detail::EliminationResult::rank, reduce_above(), LMCAS::detail::matrix_kernel::simplify_expr(), subtract_pivot_row(), LMCAS::Result< T >::success(), LMCAS::target, LMCAS::upper , 以及 LMCAS::detail::Zero.

被这些函数引用 reduce_above().

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

◆ subtract_pivot_row()

void LMCAS::detail::anonymous_namespace{exact_matrix.cpp}::subtract_pivot_row ( ExactMatrixData & matrix,
std::size_t row,
std::size_t pivot_row,
const ExprPtr & factor,
ComputationContext & context )

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

13 {
14 for (std::size_t target = 0; target < matrix.cols; ++target) {
15 matrix.at(row, target) = exact_subtract(
16 matrix.at(row, target),
17 exact_multiply(factor, matrix.at(pivot_row, target), context), context);
18 }
19}
ExprPtr exact_multiply(const ExprPtr &left, const ExprPtr &right, ComputationContext &context)
ExprPtr exact_subtract(const ExprPtr &left, const ExprPtr &right, ComputationContext &context)

引用了 LMCAS::detail::ExactMatrixData::at(), LMCAS::detail::ExactMatrixData::cols, LMCAS::detail::context, LMCAS::detail::matrix_kernel::exact_multiply(), LMCAS::detail::matrix_kernel::exact_subtract(), subtract_pivot_row() , 以及 LMCAS::target.

被这些函数引用 eliminate_below(), reduce_above() , 以及 subtract_pivot_row().

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