2021SC@SDUSC
一、矩阵的加法与减法
简言之,两个矩阵相加减,即它们相同位置的元素相加减!
注意:只有对于两个行数、列数分别相等的矩阵(即同型矩阵),加减法运算才有意义,即加减运算是可行的。
2、 运算性质 (假设运算都是可行的)
满足交换律和结合律
交换律 ;
结合律
二、矩阵与数的乘法
1、 运算规则
数 乘矩阵A,就是将数
乘矩阵A中的每一个元素,记为
或
.
特别地,称 称为
的负矩阵.
2、 运算性质
满足结合律和分配律
结合律: (λμ)A=λ(μA) ; (λ+μ)A =λA+μA.
分配律: λ (A+B)=λA+λB.
三、矩阵与矩阵的乘法
部分代码展示
void add(mat_GF2& X, const mat_GF2& A, const mat_GF2& B)
{
long n = A.NumRows();
long m = A.NumCols();
if (B.NumRows() != n || B.NumCols() != m)
LogicError("matrix add: dimension mismatch");
X.SetDims(n, m);
long mw = (m + NTL_BITS_PER_LONG - 1)/NTL_BITS_PER_LONG;
long i;
for (i = 0; i < n; i++) {
_ntl_ulong *xp = X[i].rep.elts();
const _ntl_ulong *ap = A[i].rep.elts();
const _ntl_ulong *bp = B[i].rep.elts();
long j;
for (j = 0; j < mw; j++)
xp[j] = ap[j] ^ bp[j];
}
}
void mul(vec_GF2& x, const mat_GF2& A, const vec_GF2& b)
{
if (&b == &x || A.alias(x)) {
vec_GF2 tmp;
mul_aux(tmp, A, b);
x = tmp;
}
else
mul_aux(x, A, b);
}
void mul(vec_GF2& x, const vec_GF2& a, const mat_GF2& B)
{
if (&a == &x || B.alias(x)) {
vec_GF2 tmp;
mul_aux(tmp, a, B);
x = tmp;
}
else
mul_aux(x, a, B);
}
void ident(mat_GF2& X, long n)
{
X.SetDims(n, n);
clear(X);
long i;
for (i = 0; i < n; i++)
X.put(i, i, to_GF2(1));
}
四、高斯消元
1.简介
高斯消元是一个用于求方程组的解的算法。在线性代数中非常重要。一般而言,其复杂度为O ( n 3 )可以承受200 200200及以下的数据范围(当然有的题目时限是10000 m s 10000ms10000ms什么的,特殊情况特殊对待)。
高斯消元法(Gaussian elimination)是求解线性方阵组的一种算法,它也可用来求矩阵的秩,以及求可逆方阵的逆矩阵。它通过逐步消除未知数来将原始线性系统转化为另一个更简单的等价的系统。它的实质是通过初等行变化(Elementary row operations),将线性方程组的增广矩阵转化为行阶梯矩阵(row echelon form).
2.算法理解
考虑一个二元一次方程组怎么解。
3.异或高斯消元讲解
具体代码见@元解~殇怀