目前还在更新,里面可能会出现一些奇奇怪怪的临时文件,忽略即可。
为了遵循性能优先原则,仓库内所有内容都没有错误检查,请合法使用,否则会出现未知的错误。
QMath 是一个数学库,它打包了和数论、线性代数、多项式相关的模板。
这一文件主要集成线性代数相关内容,目前有:矩阵。
自 2025.07.16 起 Matrix 从 vector 版本更新为指针版本。用指针加法尽量消除了寻址乘法,相比于 vector 版本在矩阵大小中等的情况下速度提升了
该类型位于 LinearAlgebra 文件的 QMath 命名空间中。
-
构造函数
使用如下方法会构造出一个高为
$n$ ,宽为$m$ ,初始值为全$x$ 的矩阵,矩阵中存储类型为Type的值。若不填$x$ 则会使用Type()初始化矩阵中的数,请确保Type()是合法的,否则你需要手动修改构造函数源代码才能使用。Matrix<Type> a(n, m, x);你可以同时指定
$n,m$ ,也可以同时将$n,m$ 留空(同时留空会构造一个空矩阵)。但不能只指定$n,m$ 其中一个。你还可以传入一个二维
vector来构造矩阵。Matrix<Type> a(vector<vector<Type>>(...)); -
运算符重载
-
=:可以将一个矩阵赋给另一个矩阵,也可以将一个二维vector赋给矩阵。 -
+:矩阵$+$ 矩阵、矩阵$+$ 数字(给矩阵中的每一个数都加上“数字”),没有重载数字$+$ 矩阵。 -
-:和+类似,同样重载了矩阵$-$ 数字。 -
+=:矩阵 += 矩阵、矩阵 += 数字。 -
-=:和+=类似。 -
*:矩阵$\times$ 矩阵、矩阵$\times$ 数字(给矩阵中的每一个数都乘上“数字”),没有重载数字$\times$ 矩阵。 -
*=:矩阵 *= 矩阵,矩阵 *= 数字。 -
%:矩阵 % 矩阵,将两个大小形状相同的矩阵中的每个数对应相乘,然后放在结果矩阵的相应位置上。 -
%=:%运算的%=版本。 -
==、!=:判断两个矩阵大小、形状、内容是否完全相同。 -
(size_t row, size_t col):返回矩阵第$row$ 行第$col$ 列的值(带引用)。 -
[]:若传入$i$ 则返回矩阵第$i$ 行的起始指针。 -
[][]:若传入$i,j$ 则返回矩阵第$i$ 行第$j$ 列的值(带引用)。
-
-
一些方法
-
size_t N():返回矩阵的行数。 -
size_t M():返回矩阵的列数。 -
Matrix transpose():返回该矩阵转置后的矩阵。 -
Matrix& transposeSelf():将自己转置,然后返回自己的引用。 -
Matrix applyFunction(Type (*func)(Type) 或 Type (*func)(const Type&)):创建一个大小形状相同的结果矩阵,结果矩阵中每个数$x$ 和其在原矩阵中位置对应的数$y$ 的关系为:$x=func(y)$,然后返回结果矩阵。 -
Matrix& applyFunctionSelf(Type (*func)(Type) 或 Type (*func)(const Type&)):令该矩阵中的每一个数$x$ 变为$func(x)$ ,然后返回自己的引用。 -
Matrix& resize(size_t n, size_t m, Type x = Type()):先将该矩阵清空,再构造一个大小为$n\times m$ ,初始值为$x$ 的矩阵作为该矩阵,然后返回自己的引用。
-
见此处。