简单线性代数

· · 个人记录

1. 向量

1.1 向量的定义

从原点 O 到点 A(x,y)这个运动就是向量(vector),记作 (x,y),\begin{bmatrix}x\\y\end{bmatrix}\texttt{(列向量)},\begin{bmatrix}x&y\end{bmatrix}\texttt{(行向量)},\vec x,\overrightarrow{OA}

在某些印刷中,\mathbf{x} (加粗)也为向量。

注意区分坐标 (x,y) 和向量 (x,y)

1.2 特殊的向量

$\widehat i$:x轴单位向量(基向量),他的模为 $1$,即 $\widehat i=(1,0)$。 $\widehat j$:y轴单位向量(基向量),他的模为 $1$,即 $\widehat j=(0,1)$。 $\widehat k$:z轴单位向量(基向量),他的模为 $1$,同 $\widehat i,\widehat j$,但存在于三维。 $-\widehat i,-\widehat j.-\widehat k$ 意义同理。 ![](https://cdn.luogu.com.cn/upload/image_hosting/6qjqj8ua.png) 如图,红色的就是 $\color{red}\widehat j$,蓝色的就是 $\color{blue}\widehat i$。 ### 1.3 向量的模 向量的长度就是向量的模。记作 $|\vec x|$。如果 $|\vec x|=1$,那么 $\vec x$ 就是一个单位向量。 ### 1.4 相反向量 模相同,方向相反的向量叫做相反向量。记作 $-\vec x

1.5 向量加和

向量加和:x 相加,y 相加。即:

\begin{bmatrix}x\\y\end{bmatrix}+\begin{bmatrix}a\\b\end{bmatrix}=\begin{bmatrix}x+a\\y+b\end{bmatrix}

例如:(2,3)+(4,4) 表示从原点到 (2,3),再以 (2,3) 为原点到 (4,4),相当于直接到了点 (6,7)。所以 (2,3)+(4,4)=(2+4,3+4)=(6,7)

向量相减:\vec x-\vec y=\vec x+(-\vec y)

例如 (4,5)-(2,4)=(4,5)+(-(2,4)),知道了向量数乘之后,,就可以变成 (4,5)+(-2,-4),可以算出来为 (2,1)

1.6 向量数乘

向量数乘:分别相乘。即:

\lambda\begin{bmatrix}x\\y\end{bmatrix}=\begin{bmatrix}\lambda x\\\lambda y\end{bmatrix}

例如重复此动作 3 次:x3y2

可以看做现将 x33 次,再将 y23 次。所以:

\lambda\begin{bmatrix}x\\y\end{bmatrix}=\begin{bmatrix}\lambda x\\\lambda y\end{bmatrix}

1.7 向量点乘

向量点乘:

\vec x·\vec y=|\vec x|·|\vec y|·\cos \theta

其中,\theta\vec x\vec y 的夹角。

注意向量点乘是数。

一些特殊的点乘:

\widehat i·\widehat i=1 \widehat i·\widehat j=0

2. 矩阵

2.1 矩阵的定义

一个大小为 n\times m 的矩阵可以认为是由 n 个长度为 m 的行向量组成的,或有 m 个长度为 n 的列向量组成的。用大写字母表示。

2.2 n 阶方阵

行数与列数相同的矩阵被称作 「方阵」,口语中常说做 n 阶矩阵。

2.3 同型矩阵

两个矩阵,行数与列数对应相同,称为同型矩阵。

2.4 矩阵加和

矩阵加和只存在于同型矩阵。对应数相加。即:

a_{11}&a_{12}&\cdots&a_{1n}\\ a_{21}&a_{22}&\cdots&a_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ a_{m1}&a_{m2}&\cdots&a_{mn} \end{bmatrix}+ \begin{bmatrix} b_{11}&b_{12}&\cdots&b_{1n}\\ b_{21}&b_{22}&\cdots&b_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ b_{m1}&b_{m2}&\cdots&b_{mn} \end{bmatrix}= \begin{bmatrix} a_{11}+b_{11}&a_{12}+b_{12}&\cdots&a_{1n}+b_{1n}\\ a_{21}+b_{21}&a_{22}+b_{22}&\cdots&a_{2n}+b_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ a_{m1}+b_{m1}&a_{m2}+b_{m2}&\cdots&a_{mn}+b_{mn} \end{bmatrix}

2.5 矩阵数乘

和向量数乘类似,矩阵数乘也是数相乘矩阵每一个数。即:

a_{11}&a_{12}&\cdots&a_{1n}\\ a_{21}&a_{22}&\cdots&a_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ a_{m1}&a_{m2}&\cdots&a_{mn} \end{bmatrix}= \begin{bmatrix} \lambda a_{11}&\lambda a_{12}&\cdots&\lambda a_{1n}\\ \lambda a_{21}&\lambda a_{22}&\cdots&\lambda a_{2n}\\ \vdots&\vdots&\ddots&\vdots\\ \lambda a_{m1}&\lambda a_{m2}&\cdots&\lambda a_{mn} \end{bmatrix}

2.6 旋转矩阵

旋转矩阵 P

\begin{bmatrix}\cos\theta&\sin\theta\\-\sin\theta& \cos \theta\end{bmatrix}·\vec x

将向量 \vec x 旋转 \theta^\circ

2.7 矩阵乘法

大小 n\times p 的矩阵 A 和大小 p\times m 的矩阵 B 相乘为大小为 n\times m 的矩阵 C。有:

c_{ij}=\sum_{k=1}^{p}a_{ik}b_{kj}

时间复杂度 O(nmp)

注意:矩阵乘法没有交换律,但有结合律和分配率。

2.8 主对角线

方阵中行数等于列数的元素构成主对角线。即所有 A_{ii}

2.9 单位矩阵

主对角线为 1、其余为 0 的方阵被称作单位方阵。记作 I。即:

1&0&\cdots&0\\ 0&1&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&1 \end{bmatrix}

对于任意的 n 阶方阵 A 乘上 n 阶单位矩阵,有 IA=A

2.10 零矩阵

全为 0 的矩阵被称作零矩阵。即:

0&0&\cdots&0\\ 0&0&\cdots&0\\ \vdots&\vdots&\ddots&\vdots\\ 0&0&\cdots&0 \end{bmatrix}

对于任意的 n 阶方阵 A 乘上 n 阶零矩阵,等于零矩阵。

2.11 矩阵置换

对于一个 n=m 的矩阵,交换 a_{ij}a_{ji}

3. 矩阵应用

3.1 矩阵快速幂

矩阵的乘方:A^k=\underbrace{A·A·A·A·\cdots· A}_{k\texttt{个}A}

由于矩阵有结合律,所以 A^k={(A^{\frac{k}{2}})}^2

可以使用快速幂优化。

3.2 矩阵优化递推

矩阵可以用来表示递推公式,并优化。

3.3 低级递推优化

(洛谷P1962)已知递推式 f(n)=\begin{cases}f(n-1)+f(n-2)&n\ge 3\\ 1&n\le 2\end{cases}

f(k)(k\le 10^{18})

显然,f_n=f_{n-1}+f_{n-2}

由于需要存储的有两个:f_{n-1},f_{n-2},那么我们可以定义向量 \begin{bmatrix}f_{n-1}\\f_{n-2}\end{bmatrix},我们要求的就是 \begin{bmatrix}f_n\\f_{n-1}\end{bmatrix}

所以设矩阵 A 满足 A\begin{bmatrix}f_{n-1}\\f_{n-2}\end{bmatrix}=\begin{bmatrix}f_n\\f_{n-1}\end{bmatrix}。(待定系数)

A=\begin{bmatrix}1&1\\1&1\end{bmatrix},那么左边会等于 \begin{bmatrix}f_{n-1}+f_{n-2}\\f_{n-1}+f_{n-2}\end{bmatrix}

由于 f_n=f_{n-1}+f_{n-2},所以左边还可以写成 \begin{bmatrix}f_{n}\\f_{n-1}+f_{n-2}\end{bmatrix}

而我们只需保留 f_{n-1},所以 A=\begin{bmatrix}1&1\\1&0\end{bmatrix}

而答案是不需要计算 f_1,f_2 的,所以 \begin{bmatrix}f_n\\f_{n-1}\end{bmatrix}=\begin{bmatrix}1&1\\1&0\end{bmatrix}^{k-2 }\begin{bmatrix}1\\1\end{bmatrix}

3.4 中级递推优化

已知递推式 f(n)=\begin{cases}2f(n-1)+3f(n-2)+5&n\ge 3\\ 0&n\le 2\end{cases}

f(k)(k\le 10^{18})

我们需要记录 \begin{bmatrix}f_{n-1}\\f_{n-2}\end{bmatrix}。但发现似乎不太好求。

考虑记录 \begin{bmatrix}f_{n-1}\\f_{n-2}\\1\end{bmatrix}

就可以求出它的递推加速矩阵。

4. 高斯消元

4.1 什么是消元法

消元法是将方程组中的一方程的未知数用含有另一未知数的代数式表示,并将其带入到另一方程中,这就消去了一未知数,得到一解;或将方程组中的一方程倍乘某个常数加到另外一方程中去,也可达到消去一未知数的目的。消元法主要用于二元一次方程组的求解。

by oi.wiki

4.2 解二元一次方程

\begin{cases}2x+y=5①\\6x-y=11②\end{cases}

有①+②,得 8x=16\Rightarrow x=2

x=2 代入②,得 6\times 2-y=11\Rightarrow y=1

4.3 高斯消元

  1. 将它写成矩阵形式。
  2. 寻找 a_{ii}\ne 0 的方程,并交换。
  3. a_{ii} 变成 1
  4. 将其他 a_{ji} 变成 0
  5. 解为 x_i=b_i

    4.4 高斯消元实例说明

    一般形式方程组:

a_{11}x_1+a_{12}x_2+\cdots+a_{1n}x_n=b_1\\ a_{21}x_1+a_{22}x_2+\cdots+a_{2n}x_n=b_2\\ \vdots\\ a_{m1}x_1+a_{m2}x_2+\cdots+a_{mn}x_n=b_n \end{cases}

这里举个例子:

x_1+2x_2+x_3=8\\ x_1+x_2=3\\ 3x_1+x_2+4x_3=17 \end{cases}

先用矩阵把它写出来(没有的用 0 代替):

\begin{bmatrix}1&2&1\\1&1&0\\3&1&4\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}8\\3\\17\end{bmatrix}

这个式子也可以记作 AX=B(我希望没人会直接除过去)也可理解为系数矩阵 \times 未知数矩阵 = 答案矩阵

\newcommand\BorderRect[4]{ \color{#3}\rule{#1}{#2}\kern{-#1} \color{#4}\rule{0.5px}{#2}\kern{-0.5px} \rule{#1}{0px}\rule{0.5px}{#2}\kern{-0.5px} \kern{-#1}\rule[#2]{#1}{0px} } % w, h, title, subtitle, fillcol, iconch ,iconcol \newcommand\BasicInfoBarFather[8]{ \BorderRect{#1}{#2}{#5}{ghostwhite} \kern{-#1} \raisebox{#2}{ \raisebox{-26pt}{ \color{black}\kern{-4px} \raisebox{7px}{ \color{#7}\Huge{∙}\kern{-1px} } \raisebox{10.6px}{ \kern{-20.2px} \color{white}\scriptsize\textbf{#6} } \kern{-7px}\footnotesize \raisebox{10.2px}{\textbf{\textsf{\color{#8}#3}}}\kern{2px} \raisebox{10.2px}{\textsf{#4}} } } } \def\BasicInfoBarColorFill{#F4F4F4}\def\BasicInfoBarColorIcon{#0078D4} \def\BasicWarnBarColorFill{#FFF4CE}\def\BasicWarnBarColorIcon{#9D5D00} \def\BasicOkBarColorFill{#DFF6DD}\def\BasicOkBarColorIcon{#0F7B0F} \def\BasicErrBarColorFill{#FDE7E9}\def\BasicErrBarColorIcon{#C42B1C} \newcommand\BasicInfoBar[5]{ \BasicInfoBarFather{#1}{#2}{#3}{#4} {\BasicInfoBarColorFill}{i}{\BasicInfoBarColorIcon}{\BasicInfoBarColorIcon} } \newcommand\BasicWarnBar[5]{ \BasicInfoBarFather{#1}{#2}{#3}{#4} {\BasicWarnBarColorFill}{i}{\BasicWarnBarColorIcon}{\BasicWarnBarColorIcon} } \newcommand\BasicOkBar[5]{ \BasicInfoBarFather{#1}{#2}{#3}{#4} {\BasicOkBarColorFill} {\tiny\kern{-2px}\raisebox{0.8px}{√}} {\BasicOkBarColorIcon}{\BasicOkBarColorIcon} } \newcommand\BasicErrBar[5]{ \BasicInfoBarFather{#1}{#2}{#3}{#4} {\BasicErrBarColorFill} {\kern{-2px}\raisebox{0.6px}{×}} {\BasicErrBarColorIcon}{\BasicErrBarColorIcon} } \BasicInfoBar{350px}{26px}{注意}{增广矩阵是由 A 和 B 结合起来的矩阵,记作 R=[A|B],分开和在一起都差不多。}{#000000}

增广矩阵 R 写作:

a_{11}&a_{12}&\cdots&a_{1n}&|&b_1\\ a_{21}&a_{22}&\cdots&a_{2n}&|&b_2\\ \vdots&\vdots&\ddots&\vdots&|&\vdots\\ a_{n1}&a_{n2}&\cdots&a_{nn}&|&b_n \end{bmatrix}

(然而作者太菜,不会用增广矩阵)

将第一个式子中的 x_1 的系数变为 1(这里不用变了)。

接着使用消元法,让 2\sim n 行的 x_1 的系数变为 0

\begin{bmatrix}1&2&1\\1&1&0\\3&1&4\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}8\\3\\17\end{bmatrix} \Downarrow \begin{bmatrix}1&2&1\\0&-1&-1\\3&1&4\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}8\\-5\\17\end{bmatrix} \Downarrow \begin{bmatrix}1&2&1\\0&-1&-1\\0&-5&1\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}8\\-5\\-7\end{bmatrix}

接下来对第二个进行消元。

还是先变一:

\begin{bmatrix}1&2&1\\0&1&1\\0&-5&1\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}8\\5\\-7\end{bmatrix}

接着把其他式子变成 x_2 的系数为 0 的样子。

\begin{bmatrix}1&2&1\\0&1&1\\0&-5&1\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}8\\5\\-7\end{bmatrix} \Downarrow \begin{bmatrix}1&0&-1\\0&1&1\\0&0&6\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}-2\\5\\18\end{bmatrix}

最后把第三个式子 x_3 的系数归一,得:

\begin{bmatrix}1&0&-1\\0&1&1\\0&0&1\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}-2\\5\\3\end{bmatrix}

接着把其他式子变成 x_3 的系数为 0 的样子。

\begin{bmatrix}1&0&-1\\0&1&1\\0&0&1\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}-2\\5\\3\end{bmatrix} \Downarrow \begin{bmatrix}1&0&0\\0&1&0\\0&0&1\end{bmatrix}\begin{bmatrix}x_1\\x_2\\x_3\end{bmatrix}=\begin{bmatrix}1\\2\\3\end{bmatrix}

最后 x_i=b_i 即可。即:

\begin{cases}x_1=1\\x_2=2\\x_3=3\end{cases}

4.5 高斯消元特殊情况

如果出现了 a_{ii}=0 的情况,那么往后找,寻找到一个 a_{ki}\ne 0 的交换即可。如果没有就先放在那里。

如果出现了 a_{ii}=0,b_i=0 的情况,则 x 取任意实数;如果出现了 a_{ii}=0,b_i\ne 0 的情况,则 x 无解。

注意无解的优先级是大于无限解的。

\newcommand\BorderRect[4]{ \color{#3}\rule{#1}{#2}\kern{-#1} \color{#4}\rule{0.5px}{#2}\kern{-0.5px} \rule{#1}{0px}\rule{0.5px}{#2}\kern{-0.5px} \kern{-#1}\rule[#2]{#1}{0px} } % w, h, title, subtitle, fillcol, iconch ,iconcol \newcommand\BasicInfoBarFather[8]{ \BorderRect{#1}{#2}{#5}{ghostwhite} \kern{-#1} \raisebox{#2}{ \raisebox{-26pt}{ \color{black}\kern{-4px} \raisebox{7px}{ \color{#7}\Huge{∙}\kern{-1px} } \raisebox{10.6px}{ \kern{-20.2px} \color{white}\scriptsize\textbf{#6} } \kern{-7px}\footnotesize \raisebox{10.2px}{\textbf{\textsf{\color{#8}#3}}}\kern{2px} \raisebox{10.2px}{\textsf{#4}} } } } \def\BasicInfoBarColorFill{#F4F4F4}\def\BasicInfoBarColorIcon{#0078D4} \def\BasicWarnBarColorFill{#FFF4CE}\def\BasicWarnBarColorIcon{#9D5D00} \def\BasicOkBarColorFill{#DFF6DD}\def\BasicOkBarColorIcon{#0F7B0F} \def\BasicErrBarColorFill{#FDE7E9}\def\BasicErrBarColorIcon{#C42B1C} \newcommand\BasicInfoBar[5]{ \BasicInfoBarFather{#1}{#2}{#3}{#4} {\BasicInfoBarColorFill}{i}{\BasicInfoBarColorIcon}{\BasicInfoBarColorIcon} } \newcommand\BasicWarnBar[5]{ \BasicInfoBarFather{#1}{#2}{#3}{#4} {\BasicWarnBarColorFill}{i}{\BasicWarnBarColorIcon}{\BasicWarnBarColorIcon} } \newcommand\BasicOkBar[5]{ \BasicInfoBarFather{#1}{#2}{#3}{#4} {\BasicOkBarColorFill} {\tiny\kern{-2px}\raisebox{0.8px}{√}} {\BasicOkBarColorIcon}{\BasicOkBarColorIcon} } \newcommand\BasicErrBar[5]{ \BasicInfoBarFather{#1}{#2}{#3}{#4} {\BasicErrBarColorFill} {\kern{-2px}\raisebox{0.6px}{×}} {\BasicErrBarColorIcon}{\BasicErrBarColorIcon} } \BasicInfoBar{350px}{26px}{高斯约旦消元}{是将其变成 ax=b 而不是变成 x=b,由于作者实力限制,没有提到。}{#000000}