版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

仓库源文站点原文


title: 模板 - 矩阵 categories:


基于 C++14 标准, 实现了矩阵的四则运算, 求逆, 转置, 秩, 行列式与对输入输出流的支持

{% note warning %} 仅在 GCC 下测试过 {% endnote %}

{% note warning %} https://cplib.tifa-233.com/src/code/lalg/mat.hpp 存放了笔者对该算法/数据结构的最新实现, 建议前往此处查看相关代码 {% endnote %}

<!-- more -->

使用说明

成员函数&友元函数简介

符号说明

简介

成员函数/友元函数 返回类型 功能 调用后是否改变当前类
self(i, j, equ) - 构造 ij 列的矩阵, 以 equ 作为元素的 operator==, ij0 时抛出 std::logic_error 异常 -
self(i, j, s, equ) - 构造 ij 列的矩阵, 以 equ 作为元素的 operator==, 并将所有元素初始化为 s, ij0 时抛出 std::logic_error 异常 -
a.data(i, j) / a.data(i, j) const data_t& 返回 a(i, j)
a.clear() self& 清空并返回 a
a.get_row() const const std::size_t& 返回 a 的行数
a.get_col() const const std::size_t& 返回 a 的列数
a.transform_unary(un) self& a 中的所有元素 a(i, j) 改为 un(a(i, j))
a.transform_binary(b, bin) self& a 中的所有元素 a(i, j) 改为 bin(a(i, j), b(i, j))
calc_unary(a, un) self 返回 un(a) -
calc_binary(a, b, bin) self 返回 bin(a, b) -
gauss(a) std::ptrdiff_t a 应用 Gauss-Jordan 消元法, 将 a 化为准对角矩阵, 返回 $\operatorname{rk}(a)\cdot\operatorname{sgn}\det(a)$
gauss_half(a) std::ptrdiff_t a 应用 Gauss-Jordan 消元法, 将 a 化为准上三角矩阵, 返回 $\operatorname{rk}(a)\cdot\operatorname{sgn}\det(a)$
a.trans() self 返回 a 的转置矩阵
a.rank() const std::size_t 返回 a 的秩
a.det() const data_t 返回 a 的行列式值, 不存在时抛出 std::runtime_error 异常
a.inverse() const self 返回 a 的逆矩阵, 不存在时抛出 std::runtime_error 异常
a.add(b), a.minus(b), a.multiply(b), a.divide(b) self& 逐元素四则运算
a.add(s), a.minus(s), a.multiply(s), a.divide(s) self& 逐元素四则运算
add(a, b), minus(a, b), multiply(a, b), divide(a, b) self& 逐元素四则运算 -
add(a, s), minus(a, s), multiply(a, s), divide(a, s) self& 逐元素四则运算 -

代码

<details open> <summary><font color='orange'>Show code</font></summary> {% icodeweb blog lang:cpp matrix/Matrix.hpp %} </details>

示例

<details open> <summary><font color='orange'>Show code</font></summary> {% icodeweb blog lang:cpp matrix/Matrix_exp.cpp %} </details>