数学/数论专题-学习笔记:矩阵小记#1

1. 前言

本篇文章是作者学习矩阵时候的一些个人笔记。

由于作者是个高中 OIer,因此并不会涉及到有关线性代数的很多知识,只记录与 OI 有关的矩阵。

这边建议学线性代数的人看一下这篇博文,讲的非常好:理解矩阵(一)(Author:孟岩)。

2. 定义

2.1 向量

讲矩阵之前我们先来讲讲向量。

前置知识:高中数学向量。

向量的英文名是 vector。

由平面向量基本定理可知,任何一个向量都可以被表示成 \(a\vec{e_1}+b\vec{e_2}\),称这个向量的坐标是 \((a,b)\)。这是二维空间内的向量。

现在我们扩展一下,扩展到 \(n\) 维向量,同样可以将任意一个向量表示成这样:\(\vec{z}=a_1\vec{e_1}+a_2\vec{e_2}+...+a_n\vec{e_n}\)

那么记 \(\vec{z}\) 的坐标是 \((a_1,a_2,...,a_n)\)

这就是向量。有没有发现跟一维数组长得很像?

2.2 矩阵

矩阵说白了就是一堆数框起来,就像下面这样:

\[\begin{bmatrix}2&3&4\\1&8&3\\5&4&3\end{bmatrix} \]

也就是个二维数组,其大小为 \(3 \times 3\)

当然只是这样理解,会导致在做某些毒瘤题的时候搞不清楚到底要干什么,所以还是要把向量拉进来。


理解 1:

从向量的角度看,一个大小为 \(n \times m\) 的矩阵实际上就是 \(n\)\(m\) 维向量的组合。

比如还是上面这个矩阵,就是 \((2,3,4),(1,8,3),(5,4,3)\) 这三个向量的组合。


理解 2:

从坐标系的角度看,我们可以认为矩阵描述了一个坐标系。

这个坐标系是 \(m\) 维的,该坐标系中的每一个单位向量是一个 \(n\) 维向量。

显然对于 \(n=m\) 的时候上面这句话是成立的,但是对于 \(n \neq m\) 的情况上面这句话同样成立。

为什么?

毕竟向量平移之后是一样的,你完全可以将这 \(m\)\(n\) 维向量的起点重合,这样这些向量就可以决定这个 \(m\) 维空间。

如果不理解,看孟岩的理解矩阵(一)

当然作为一个 OIer,简单记住矩阵的方式就是矩阵是个二维数组,但是坐标系这个理解方式很有必要,否则你会对矩阵乘法蒙圈的。

矩阵里面有一类特殊的矩阵:单位矩阵 \(I\),也就是主对角线上元素为 1,其余为 0 的矩阵,像这样:

\[\begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix} \]

3. 运算

3.1 矩阵加/减法

矩阵的加法与减法就是对应元素一一相加/减。

能够相加/减的矩阵大小必须相同,都是 \(n \times m\)

比如说下面的矩阵相加减就是个很好的例子:

\[\begin{bmatrix}2&4&8\\1&3&2\end{bmatrix}+\begin{bmatrix}3&2&9\\1&4&6\end{bmatrix}=\begin{bmatrix}5&6&17\\2&7&8\end{bmatrix} \]

\[\begin{bmatrix}2&4&8\\1&3&2\end{bmatrix}-\begin{bmatrix}3&2&9\\1&4&6\end{bmatrix}=\begin{bmatrix}-1&2&-1\\0&-1&-4\end{bmatrix} \]

另外还有一种比较少见的矩阵加法方式是直和,参见百度百科

矩阵加法是满足交换律与结合律的。

3.2 矩阵乘法

先给一下定义:设两个矩阵 \(A,B\),大小分别为 \(a \times b,b \times c\),那么 \(A\) 乘以 \(B\) 的结果是 \(C=AB\),其大小为 \(a \times c\)\(C\) 中每个元素计算方式如下:

\[C_{i,j}=\sum_{i=1}^{a}\sum_{j=1}^{c}\sum_{k=1}^{b}A_{i,k} \times b_{k,j} \]

这说明两个矩阵相乘,必须要满足前一个的列数等于后一个的行数。

从这里我们也可以给出矩阵中幂的定义:\(A^n=AAA...A\)\(n\)\(A\)

对于 OIer 而言,更常用的是两个 \(n \times n\) 的矩阵相乘。

但是矩阵乘法为什么要这样定义呢?这样定义的意义在哪里?

实际上前面说过矩阵是个坐标系

因此我们可以认为矩阵乘法 \(AB\) 是表示组成 \(B\) 的向量们在坐标系 \(A\) 下面的一个描述,在 \(A\) 的描述下这些向量所组成的矩阵为 \(C\)

矩阵乘法满足结合律,但是并不满足交换律。

对于单位矩阵而言,有一个特殊的性质:\(IA=I\)

这边给一下矩阵乘法的代码:

struct Matrix
{
    int a[MAXN][MAXN], r, c;
    Matrix operator *(const Matrix &fir)
    {
        Matrix tmp; memset(tmp.a, 0, sizeof(tmp.a));
        tmp.r = r; tmp.c = fir.c;
        for (int i = 1; i <= r; ++i)
            for (int k = 1; k <= c; ++k)
            {
                int t = a[i][k];
                for (int j = 1; j <= fir.c; ++j)
                    { tmp.a[i][j] += t * fir.a[k][j]; tmp.a[i][j] %= m; }
            }
        return tmp;
    }
};

注意上述代码的循环顺序与矩阵乘法定义的循环顺序有所不同,实际上这两者是等价的,而上述代码利用了 Cache 的性质卡常,使得矩阵乘法的常数不至于太大。

3.3 二项式展开

首先回顾实数上的二项式定理:\((a+b)^n=\sum_{i=0}^{n}C_{n}^{i}a^{i}b^{n-i}\)

所以两个矩阵 \(A,B\)\((A+B)^n=\sum_{i=0}^{n}C_{n}^{i}A^{i}B^{n-i}\) 就成立了?

并不是,有个条件 \(AB=BA\),也叫做 \(A,B\) 可交换,只有在此条件下上式成立。

严谨证明不会,但是可以感性理解,比如说 \((a+b)^2=a^2+b^2+ab+ba\),由于实数满足 \(ab=ba\),所以可以合并成 \(a^2+b^2+2ab\),但是 \((A+B)^2=A^2+B^2+AB+BA\)\(AB\) 不一定等于 \(BA\),所以不能合并,而只有 \(AB=BA\) 时才能合并,此时可以证明上面矩阵的二项式展开是对的。

这玩意的主要应用是出题人可能会在这里挖个坑恶心你。

4. 总结

  • 向量:记 \(\vec{z}=a_1\vec{e_1}+a_2\vec{e_2}+...+a_n\vec{e_n}\) 的坐标是 \((a_1,a_2,...,a_n)\),形如一维数组。
  • 矩阵:形如二维数组,可以看作是一些向量的组合,也可以看作是一个坐标系。
  • 矩阵加/减法:对应元素相加/减。
  • 矩阵乘法:设两个矩阵 \(A,B\),大小分别为 \(a \times b,b \times c\),那么 \(A\) 乘以 \(B\) 的结果是 \(C=AB\),其大小为 \(a \times c\)\(C\) 中每个元素计算方式如下:

\[C_{i,j}=\sum_{i=1}^{a}\sum_{j=1}^{c}\sum_{k=1}^{b}A_{i,k} \times b_{k,j} \]

  • 二项式展开:当且仅当 \(A,B\) 可交换时,有 \((A+B)^n=\sum_{i=0}^{n}C_{n}^{i}A^{i}B^{n-i}\)
posted @ 2022-04-17 16:20  Plozia  阅读(179)  评论(0)    收藏  举报