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

1. 前言

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

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

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

2. 定义

2.1 向量

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

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

向量的英文名是 vector。

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

现在我们扩展一下,扩展到 n 维向量,同样可以将任意一个向量表示成这样:z=a1e1+a2e2+...+anen

那么记 z 的坐标是 (a1,a2,...,an)

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

2.2 矩阵

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

[234183543]

也就是个二维数组,其大小为 3×3

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


理解 1:

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

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


理解 2:

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

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

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

为什么?

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

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

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

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

[100010001]

3. 运算

3.1 矩阵加/减法

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

能够相加/减的矩阵大小必须相同,都是 n×m

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

[248132]+[329146]=[5617278]

[248132][329146]=[121014]

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

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

3.2 矩阵乘法

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

Ci,j=i=1aj=1ck=1bAi,k×bk,j

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

从这里我们也可以给出矩阵中幂的定义:An=AAA...AnA

对于 OIer 而言,更常用的是两个 n×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=i=0nCniaibni

所以两个矩阵 A,B(A+B)n=i=0nCniAiBni 就成立了?

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

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

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

4. 总结

  • 向量:记 z=a1e1+a2e2+...+anen 的坐标是 (a1,a2,...,an),形如一维数组。
  • 矩阵:形如二维数组,可以看作是一些向量的组合,也可以看作是一个坐标系。
  • 矩阵加/减法:对应元素相加/减。
  • 矩阵乘法:设两个矩阵 A,B,大小分别为 a×b,b×c,那么 A 乘以 B 的结果是 C=AB,其大小为 a×cC 中每个元素计算方式如下:

Ci,j=i=1aj=1ck=1bAi,k×bk,j

  • 二项式展开:当且仅当 A,B 可交换时,有 (A+B)n=i=0nCniAiBni
posted @   Plozia  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示