如何直观理解矩阵和线性代数？
长文预警。7月2日已全部更新完毕，并修正几处typo。 要直观理解线性代数里面那些奇奇怪怪的东西，比如什么特征向量，最小二乘等，最好从几何的角度来理解。这篇回答会从几何的角度来从头开始讲线性代数，所以顺序可能和教科书不太一样，目的是增进理解，但是可能对于解题没有太大帮助。为了更方便大家在脑海里获得图像，我们尽量先从二维(R^2) 的情况来得出「直观」的结论，然后再推广到高维。 目录： 普通二维向量 基本定义 在平面上既有大小又有方向的量。可以用一个二元坐标来表示，比如 \vec{v} = (x,y) ，表示终点相对于起点的偏移量为x和y，也可以理解为把向量起点放到坐标原点上，终点所在的坐标。 几何意义 可以用一个箭头来"绘制"二维向量，箭头的长度就是向量的模，箭头的方向就是向量的方向。这个向量你随意放在坐标系的任何地方，只有长度和方向不变，那就是同一个向量，且易证只要长度方向不变，其坐标表达式就不变。比如图中的蓝色箭头都是同一个向量 \vec{v} = (2,1) 计算 若有任意向量 \vec{v} = (a,b),\vec{u} = (c,d) ，任意实数 \lambda 向量的长度（模）： ||\vec{v}|| = \sqrt{a^2+b^2} 向量的加法： \vec{v} + \vec{u} = (a+c, b+d) ，且满足平行四边形法则，说白了就是把 \vec{u} 的起点平移到 \vec{v} 的终点上，然后以 \vec{v} 的起点为起点，以 \vec{u} 的终点为终点的向量就是它们的和。如图，蓝色的是 \vec{v} 和 \vec{u} ，红色的就是 \vec{v}+\vec{u} 向量的数乘： \lambda\vec{v} = (\lambda a, \lambda b) ，比如 \lambda = 3 ，就是3个 \vec{v} 相加，按照加法的本质（首尾相连）可以轻易求出向量的数乘， 3\vec{v} 如图所示 向量的点积： \vec{v}·\vec{u} = ac+bd 。要理解它的本质其实很简单，两个方向不同的玩意怎么相乘呢？那就先让它们方向相同，也就是让其中一个向量作另一个向量的投影，所以它的本质就是其中一个向量投影到另一个向量身上的长度乘以另一个向量的长度。若已知它们的夹角为\theta ，那么就有 \vec{v}·\vec{u} = |\vec{v}||\vec{u}|\cos{\theta} ，而其结果等同于行向量乘以列向量： (a,b)\left(\begin{matrix}c\\d\end{matrix}\right) = ac+bd =\vec{v}·\vec{u} ，至于为什么会存在这种“巧合”，需要在几何上通过线性变换的几何本质进行证明，具体证明过程这里就先忽略了。 二维基向量 在平面系统中有一对基向量 \vec{i} = (1,0),\vec{j} = (0,1) ，用它们的线性组合（加法和数乘）来表示任意的向量，也就是任意向量 \vec{v} = (x,y) = x\vec{i} + y\vec{j} 。如图用基向量来表示 \vec{v} = (2,3) = 2\vec{i} + 3\vec{j} 这是非常重要的思想，请牢牢记在脑海中。 实际上基向量可以任意去取，你可以在坐标系中任意找两个向量作为基向量，只要这一对基向量线性无关（不共线），那么它们就可以用来表示这个坐标系下所有存在的向量。 简单证明一下：任意一对线性无关的基向量 \vec{i} = (a,b), \vec{j} = (c,d) ，只考虑加法和数乘。则对于任意的向量 \vec{v} = (x,y) ，一定存在两个实数 n，m ，使得 \vec{v} = n\vec{i} + m\vec{j} = (na,nb) + (mc,md) = (na+mc,nb+md) = (x,y) 那么就有方程组： \left\{ \begin{aligned} x & = na+mc \\ y & = nb+md \end{aligned} \right. 因为 \vec{i},\vec{j} 线性无关，即 \frac{a}{b} \neq \frac{c}{d} ，也就是 ad \neq bc ，那么方程就存在唯一解： n = \frac{dx-cy}{ad-bc}, m = \frac{ay-bx}{ad-bc} 那么对于任意的向量 \vec{v} = (x,y) ，和一对基向量 \vec{i} = (a,b),\vec{j} = (c,d) 我们都能找到两个常数 n,m 来表示这个向量 \vec{v} = n\vec{i} + m\vec{j} = \frac{dx-cy}{ad-bc}\vec{i} + \frac{ay-bx}{ad-bc}\vec{j} 顺便一提，如果这对基向量线性相关（共线），那么它们就只能表示它们所在的那条直线上的所有向量；而如果它们都是零向量，则它们只能表示零向量。 这对基向量能表示的所有的向量的集合，叫做这对基向量张成的空间。在平面中，如果这对基向量线性无关，则它们张成的空间就是整个平面；如果它们线性相关，则张成的空间就是它们所在的直线；如果它们是零向量，则它们张成的空间就是原点。 基本定义 所谓变换就是一个函数，这个函数接收一个向量作为输入，即需要变换的向量，输出一个新的向量，即变换后的向量： \vec{u} = L(\vec{v}) ， L 就是一个变换。在几何上的意义就是把一个向量“变形”成另一个向量，比如旋转、缩放、斜切等。那满足什么条件的变换才是「线性」变换呢？严格定义如下，变换需满足： L(\vec{v} + \vec{u}) = L(\vec{v}) + L(\vec{u})\tag{1} L(c\vec{v}) = cL(\vec{v})\tag{2} 即可加性和等比例（一阶齐次），则变换 L 就是线性变换。 在几何上需满足：所有起点位于原点的向量经过变换后起点仍然处于原点（故平移不是线性变换）；所有在同一直线上且等距的点变换后仍处于同一直线且等距。 求解表达式 我们在二维空间（ R^2 ）来求解一下函数 L 的表达式（可将结论推广到任意维）。令 \vec{i}=\left(\begin{matrix}1\\0\end{matrix}\right),\vec{j}=\left(\begin{matrix}0\\1\end{matrix}\right) 为 R^2 的一组基。 如果有任意线性变换 L ，将它作用于任意向量 \vec{v}=\left(\begin{matrix}x\\y\end{matrix}\right) ，即 L(\vec{v}) ，可用基向量表示为 L(x\vec{i}+y\vec{j}) 由线性变换的性质： L(\vec{v}) = L(x\vec{i}+y\vec{j}) = L(x\vec{i}) + L(y\vec{j}) = xL(\vec{i}) + yL(\vec{j}) 我们来关注一下结论： L(\vec{v}) = xL(\vec{i}) + yL(\vec{j})\tag{1} 再进一步，我们定义两个新的基向量： \vec{k} = L(\vec{i}),\vec{l} = L(\vec{j}) 接下来我们对(1)式进行变形： L(\vec{v}) = x\vec{k} + y\vec{l} = (\vec{k},\vec{l})\left(\begin{matrix}x\\y\end{matrix}\right)\tag{2} 若令 \vec{k} = \left(\begin{matrix}a\\c\end{matrix}\right),\vec{l} = \left(\begin{matrix}b\\d\end{matrix}\right) ，那么我们可以构造一个矩阵 A_t=(\vec{k}, \vec{l})=\left(\begin{matrix}a&b\\c&d\end{matrix}\right) 对(2)式进一步计算： L(\vec{v})=x\vec{k}+y\vec{l}=(\vec{k},\vec{l})\left(\begin{matrix}x\\y\end{matrix}\right)=\left(\begin{matrix}a&b\\c&d\end{matrix}\right)\left(\begin{matrix}x\\y\end{matrix}\right)=A_t\left(\begin{matrix}x\\y\end{matrix}\right)=A_t\vec{v} 只关注一下结果： L(\vec{v}) = A_t\vec{v} 其中 A_t=(\vec{k},\vec{l})=\left(\begin{matrix}a&b\\c&d\end{matrix}\right) 也就是说线性变换即输入向量左乘一个矩阵，该矩阵是原基向量 \vec{i}=\left(\begin{matrix}1\\0\end{matrix}\right),\vec{j}=\left(\begin{matrix}0\\1\end{matrix}\right) 进行线性变换后的基向量构成的：A_t=(\vec{k},\vec{l})=(L(\vec{i}),L(\vec{j})) 几何意义 如果上面这段描述读起来有点懵逼，我们在几何上来看线性变换。如图，对于蓝色的向量 \vec{v} = \left(\begin{matrix}2\\3\end{matrix}\right) ，它是由2个 \vec{i} = \left(\begin{matrix}1\\0\end{matrix}\right) 和3个 \vec{j} = \left(\begin{matrix}0\\1\end{matrix}\right) 加起来的即 \vec{v} = 2\vec{i} + 3\vec{j} ，现在我们想要得到一个线性变换，使得任意输入向量顺时针旋转60°，也就是对于任意输入向量，输出向量是它顺时针旋转60°后的结果。我加了一个动画来看看这个线性变换作用于平面上所有向量（想象蓝色的向量就是任意一个向量）的效果： 线性变换后，蓝色的向量经过旋转变成了新的向量 \vec{u} ，红色的向量（基向量）经过线性变换变成了新向量 \vec{k},\vec{j} ，而 \vec{u} = 2\vec{k} + 3\vec{j} ，其旋转后的表达式仍然不变，也就是说我们有 L(\vec{v}) = \vec{u} = 2\vec{k} + 3\vec{j} = (\vec{k}, \vec{j})\left(\begin{matrix}2\\3\end{matrix}\right)=(\vec{k}, \vec{j})\vec{v} = A_t\vec{v} 所以说要找到线性变换的变换矩阵，就是看线性变换后的两个基向量跑到哪去了。所以我们可以把矩阵看做是一个线性变换的表示，该矩阵的列就是原基向量线性变换后的表达式。 基本定义 由 m \times n 个数 a_{ij} 排成的m行n列的数表称为m行n列的矩阵，简称 m\times n 矩阵。记作： A = \left(\begin{matrix}a_{11}&a_{12} & ... &a_{1n}\\a_{21}&a_{22} & ... &a_{2n}\\a_{31}&a_{32} & ... &a_{3n}\\...&... & ... &...\\a_{m1}&a_{m2} & ... &a_{mn}\end{matrix}\right) 这 m\times n 个数称为矩阵A的元素，简称为元，数 a_{ij} 位于矩阵A的第i行第j列，称为矩阵A的(i,j) 元，以数a_{ij}为 (i,j) 元的矩阵可记为 (a_{ij}) 或 (a_{ij})m × n ，m×n矩阵A也记作 A_{mn} 。 若 m=n ，则矩阵A又称为n阶方阵，记作 A_n ，若方阵对角线上的元素都为1，则称为单位矩阵，记作 I_n ，比如 I_2 = \left(\begin{matrix}1&0\\0&1\end{matrix}\right) ，任意矩阵乘以单位矩阵都是它本身： A_nI_n= A_n 运算 矩阵相等 如果 A=(a_{ij}), B=(b_{ij}) 的行数和列数相同，且对于任意的 i,j 都有 a_{ij}=b_{ij} ，则称矩阵A与矩阵B相等，记为 A=B ，注意：不同阶数的零矩阵是不相等的。说白了矩阵相等的充要条件是：两个矩阵阶数要一样，且对应位置的元素要相等。 矩阵乘法 左边矩阵的行向量依次乘以右边矩阵的列向量。具体地：左矩阵第i行的行向量乘以右矩阵第j列的列向量所得结果作为结果矩阵第i行第j列的元素，所以左矩阵的列数须等于右矩阵的行数才可相乘： 若有两个矩阵 A = \left(\begin{matrix}a_{11}&a_{12}\\a_{21}&a_{22}\end{matrix}\right),B=\left(\begin{matrix}b_{11}&b_{12}\\b_{21}&b_{22}\end{matrix}\right) 则左矩阵的两个行向量 \vec{a_1} = (a_{11},a_{12}), \vec{a_2} = (a_{21},a_{22}) ，右矩阵的两个列向量 \vec{b_1} = \left(\begin{matrix}b_{11}\\b_{21}\end{matrix}\right),\vec{b_2}=\left(\begin{matrix}b_{12}\\b_{22}\end{matrix}\right) ，可求得矩阵乘积的结果为： AB = \left(\begin{matrix}\vec{a_1}\vec{b_1}&\vec{a_1}\vec{b_2}\\\vec{a_2}\vec{b_1}&\vec{a_2}\vec{b_2}\end{matrix}\right) = \left(\begin{matrix}a_{11}b_{11}+a_{12}b_{21}&a_{11}b_{12}+a_{12}b_{22}\\a_{21}b_{11}+a_{22}b_{21}&a_{21}b_{12}+a_{22}b_{22}\end{matrix}\right) 矩阵乘法满足结合律不满足交换律。 几何意义 矩阵的几何意义 线性变换。把矩阵看做线性变换是理解矩阵（极其后面的各种性质）的非常重要的思想！ 对于任意矩阵 A = \left(\begin{matrix}a&b\\c&d\end{matrix}\right) 可看做是一个线性变换，该线性变换将原基向量 \vec{i} = \left(\begin{matrix}1\\0\end{matrix}\right), \vec{j} = \left(\begin{matrix}0\\1\end{matrix}\right) 在平面上变换成了新的一对基向量 \vec{k} = \left(\begin{matrix}a\\c\end{matrix}\right),\vec{l} = \left(\begin{matrix}b\\d\end{matrix}\right) 向量左乘矩阵的几何意义 对该向量进行矩阵所表示的线性变换。 矩阵乘法的几何意义 将多个线性变换复合成一个线性变换。 证明： 若有矩阵 A_1,A_2 ，和任意向量 \vec{v} ，将向量进行 A_1 所表示的线性变换得到变换后的向量 \vec{u} = A_1\vec{v} ，再对 \vec{u} 进行矩阵 A_2 所表示的线性变换，得到变换后的向量 \vec{w} = A_2\vec{u} ，所以有 \vec{w} = A_2\vec{u} = A_2(A_1\vec{v}) = (A_2A_1)\vec{v} = A\vec{v} 其中 A = A_2A_1 ，也就是对原向量 \vec{v} 进行线性变换 A 的结果等同于先进行线性变换 A_1 再进行线性变换 A_2 ，证明了矩阵乘法就是将多个线性变换 A_1,A_2 复合成一个线性变换 A 。 矩阵的转置 把矩阵的行和列反过来写： A=(a,b),A^T=\left(\begin{matrix}a\\b\end{matrix}\right), B = \left(\begin{matrix}c&d\\e&f\end{matrix}\right),B^T=\left(\begin{matrix}c&e\\d&f\end{matrix}\right) 运算性质： (A^T)^T = A, (A+B)^T = A^T+B^T, (kA)^T = kA^T, (AB)^T = B^TA^T 矩阵的逆 设 A 为n阶方阵，如果存在n阶方阵 B ，有 AB=BA=I_n ，则 B 为 A 的逆阵，记作 B = A^{-1} 。只要有 AB=I_n ，必然有BA=I_n 性质： 1、 (A^{-1})^{-1} = A 2、 (kA)^{-1} = \frac{1}{k}A^{-1} (k\neq0) 3、A,B均是同阶可逆矩阵，则( (AB)^{-1} = B^{-1}A^{-1} 4、 (A^{-1})^T = (A^T)^{-1} 矩阵的逆就是线性变换的逆变换，比如若 A 表示顺时针旋转90°的话，那么 A^{-1} 就表示逆时针旋转90°，总之，先经过 A 变换后再经过 A^{-1} 变换，向量就会变成原来的样子（因为 AA^{-1}=I , I 所表示的线性变换就是“不做任何变换”）。 矩阵的行列式（det） 基本定义 只有方阵才有行列式，记作 det(A) 或 |A| 。若 A = \left(\begin{matrix}a&b\\c&d\end{matrix}\right) ， |A| = \left|\begin{matrix}a&b\\c&d\end{matrix}\right| = ad - bc 。 几何意义 n维空间中的物体进行矩阵所表示的线性变换后其体积的缩放比例。考虑二维平面下的线性变换比较直观，如图，原基向量 \vec{i}=(1,0),\vec{j} = (0,1) ，若将 \vec{i},\vec{j} 形成的平行四边形面积（二维空间的体积就是面积）记作 S_{ij} ，那么很明显在变换前这个平行四边形就是一个边长为1的正方形，有 S_{ij} = 1 。 若某线性变换将它们变成了 \vec{i} = (2,0), \vec{j} = (3,3) ，也就是该线性变换的变换矩阵为 A=\left(\begin{matrix}2&3\\0&3\end{matrix}\right) ，此时平行四边形的面积根据底乘高为 S_{ij}^{'} = 2 \times 3 = 6 。 那么矩阵 A 所表示的线性变换使得变换后的面积变为了原来的 \frac{S_{ij}^{'}}{S_{ij}} = 6 倍，所以 |A| = \left|\begin{matrix}2&3\\0&3\end{matrix}\right| = 6 ，这就是行列式的几何意义。 若行列式为0，则表示该线性变换将会使n维空间下的物体压缩到m(m<=n-1)维空间下去，同时线性方程组 A\vec{x}=\vec{b} 无解，因为 A 是N维方阵， \vec{x} 是N维列向量，而 A 所表示的线性变换会让 \vec{x} 被压缩到更低纬度下去，即列向量 \vec{b} 的维度小于 \vec{x} 的维度，所以你找不到这样的 \vec{x} 能满足方程。 AB 和 BA 不一定相等，但是 |AB| = |BA| = |A||B| ，这个性质用几何意义来想就很容易想明白为什么。 矩阵的秩（rank） 基本定义 矩阵进行初等行变换后不全为0的行数，矩阵的秩记作 R(A) 或 Rank(A) 几何意义 本质上就是n维向量在进行该矩阵所表示的线性变换后变成rank维的向量，若n=rank，则该矩阵满秩。满秩表示矩阵所表示的线性变换不会使输入向量降维。 性质 这些性质用线性变换的角度来看矩阵就很容易想明白。 1. 零矩阵的秩是0，因为零矩阵乘以任意向量都会变为零向量，就是个点，意味着零矩阵表示的线性变换使得任意向量压缩到了0维空间，所以秩为0。 2. 如果 A_{m\times n} ，则 0\le R(A) \le min{m,n} 3. R(AB) \le min{R(A), R(B)} 4. 如果 A 可逆，那么 R(B) = R(AB) 5. 满秩 \Leftrightarrow 行列式不为0 \Leftrightarrow 可逆 线性空间是纯抽象的概念，也是线性代数中最重要的概念之一，它没有对应的几何意义（至少我暂时还想不出来），所以这里我尽量讲的白话一些。 线性空间的定义 满足以下条件的集合就是线性空间，而该集合里面的元素叫做“向量”。 如果 R 表示所有实数的集合（ R 里面每一个元素都是实数且R包含了所有可能的实数），这时我们寻找一个集合 V ，这个集合V中的任意两个元素 \alpha、\beta \in V ，都能找到另一个元素 \gamma\in V 能表示为这两个元素的和，记作 \gamma = \alpha+\beta ；且对于任意实数 \lambda\in R ，和任意元素 \alpha\in V ，都能找到对应的元素 \delta \in V 作为 \lambda 和 \alpha 之积，记作 \delta=\lambda \alpha ；且这两个运算（和、积）须满足以下八条性质： 对于任意的 \alpha,\beta,\gamma \in V,\lambda,\mu\in R 则 V 叫做线性空间或者向量空间，满足这八条性质的加法和数乘叫做线性运算。 本质：对任意的 \alpha,\beta \in V,\lambda,\mu\in R 都有 \lambda\alpha + \mu\beta \in V ，则集合 V 是线性空间。 我们目前认识的，一个“箭头”这样的“向量”的集合就是线性空间，但是不仅是箭头，任何元素，只要你能想到的，并且自己定义出它们之间的加法和数乘，满足以上本质的，都可以叫做“向量”。 矩阵的值域 设 A_{m\times n} 是一个固定矩阵，则集合 V = \{y\in R^m| y = Ax, x\in R^n\} 是线性空间。 这就是把矩阵A看做一个固定线性变换， R^n 表示n维向量空间，是一个集合，里面的元素全都是n维向量，且包含所有n维向量。则 x 表示任意的n维向量，左乘矩阵表示任意n维向量 x，施加该线性变换后的结果也就是 y ，所有的可能构成一个集合 V ，这个集合 V 很明显也是一个线性空间。 证明：（目标，任意的 y_1,y_2 \in V, a,b\in R ,  ay_1 + by_2 \in V ） 设 y_1 = Ax_1, y_2 = Ax_2 ，则 ay_1 + by_2 = aAx_1 + bAx_2 = A (ax_1 + bx_2) 由于 x_1,x_2 \in R^n ，根据线性空间的本质，令 x_3 = ax_1+bx_2,x_3\in R^n 所以 y_3 = ay_1 + by_2 = Ax_3 \in V ，证毕。 我们称这样的 V 为矩阵 A 的值域（把矩阵当做线性变换的思想）。 矩阵的核 设 A_{m\times n} 是一个固定矩阵，则集合 V = \{x\in R^n| Ax = 0\} 是线性空间。 证明：（目标：任意 x_1,x_2\in V, a,b \in R , 证明 ax_1+bx_2 \in V ，即 A(ax_1+bx_2)=0 ） A(ax_1+bx_2) =A(ax_1)+A(bx_2)=aAx_1+bAx_2 = a 0 + b0 = 0 所以 ax_1+bx_2 \in V 得证。 我们称这样的V为矩阵A的核(方程组 Ax=0 的解空间)，所以矩阵的核的几何意义就是：一个向量的集合，集合中任意元素进行矩阵所表示的线性变换，都会被压缩成零向量，且集合中包含了所有满足该条件的向量，这个集合就是矩阵的核。 线性空间的基 线性表示 对于任意的 \alpha_1,\alpha_2,...,\alpha_n, \beta \in V ,若存在一组实数 k_1,k_2,...,k_n \in R ,满足 k_1\alpha_1 +k_2\alpha_2 +⋯+k_n\alpha_n =\beta , 则称 \beta 可以由 \alpha_1,\alpha_2,...,\alpha_n 线性表示。 线性相关 对于任意的 \alpha_1,\alpha_2,...,\alpha_n \in V ,若存在一组不全为0的实数 k_1,k_2,...,k_n \in R ,满足 k_1\alpha_1+k_2\alpha_2+⋯+k_n\alpha_n=\theta , 则 \alpha_1,\alpha_2,...,\alpha_n 线性相关。 线性相关 \Leftrightarrow 至少存在一个向量可以被其余向量线性表示。 任意n+1个n维向量一定线性相关! 线性无关 对于任意的 \alpha_1,\alpha_2,...,\alpha_n \in V ,若满足 k_1\alpha_1+k_2\alpha_2+⋯+k_n\alpha_n =\theta , 则必有 k_1 =k_2 =⋯=k_n =0 ,则 \alpha_1,\alpha_2,...,\alpha_n 线性无关。 例：证明向量 \vec{x_1} = (3,4),\vec{x_2} = (1,0) 线性无关。 证：设 k_1\vec{x_1} + k_2\vec{x_2} = \theta ，我们有 (3k_1,4k_1)+(k_2,0) = (0,0) \Rightarrow\left\{\begin{aligned}3k_1+k_2 &= 0 \\ 4k_1 &= 0\end{aligned}\right. \Rightarrow \left\{\begin{aligned} k_1 = 0 \\ k_2 = 0\end{aligned}\right. 得证。 线性空间基的定义 在线性空间 V 中，如果存在n个元素 \alpha_1, \alpha_2, ... , \alpha_n ，满足: 那么， \alpha_1, \alpha_2, ... , \alpha_n 称为线性空间 V 的一个基， n (基的个数)称为线性空间 V 的维数。 空间V称为由基 \alpha_1, \alpha_2, ... , \alpha_n 张成的线性空间，记作 V=span\{\alpha_1, \alpha_2, ... , \alpha_n\} 。 性质 V= \{x\vert x = c_1\alpha_1 + c_2\alpha_2 + ⋯ + c_n\alpha_n, c_i为任意实数，i = 1,2, ... , n\} 例: 方程组 Ax=0 的基础解系 x_i(i=1,...n−r) 为其解空间的一组基 方程的解: x=c_1x_1 + c_2x_2 + ⋯ + c_{n−r}x_{n−r} 其中 c_i 为任意实数 坐标 若 V 是一个线性空间，  \alpha_1, \alpha_2, ... \alpha_n 是线性空间的一组基，对于 \alpha \in V ，如果有 \alpha = x_1\alpha_1 + x_2\alpha_2 + ⋯ + x_n\alpha_n ，那么 其表示系数所构成的n维实向量 x_1, x_2, ... , x_n  称为 \alpha 在基 \alpha_1, \alpha_2, ... , \alpha_n 下的坐标。所以，线性空间的元素称为向量。 例: 二维实向量空间 R^2 = \{(x, y) | x,y \in R\} 是一个线性空间，向量组 (这里偷懒用行向量来写一下)\{(1,0 ),( 0,1)\} ， \{(1,0) , (1,1)\} 分别都是 R^2 的一组基。向量 (5,3) 可以表示成 (5,3) =5(1,0) +3(0,1) 或者 (5,3) =2(1,0) +3(1,1) 。那么 (5,3) 在基 \{(1,0) ,( 0,1 )\} 下的坐标是 (5,3) ，在基  \{(1,0) , (1,1)\}  下的坐标是 (2,3) 。 坐标转换 对于二维实向量空间的一对基 A=\{\left(\begin{matrix}1\\0\end{matrix}\right), \left(\begin{matrix}0\\1\end{matrix}\right)\} 和另一对基 B = \{\left(\begin{matrix}a\\b\end{matrix}\right), \left(\begin{matrix}c\\d\end{matrix}\right)\} ，它们的坐标之间应该怎样转换呢？ 若向量\vec{v}在A下的坐标为(x,y)，那么在B下的坐标是多少呢？ 同样，若向量\vec{v}在B下的坐标是(x,y)，那么它在A下的坐标是多少呢？ 从线性变换的角度来看就相当好理解了：我们可以把坐标的转换看做一个线性变换。 若有一线性变换矩阵 T = \left(\begin{matrix}a&c\\b&d\end{matrix}\right) ，基A下的一向量施加该线性变换后变为了 \vec{u} = T\vec{v} = \left(\begin{matrix}a&c\\b&d\end{matrix}\right)\vec{v} = x\left(\begin{matrix}a\\b\end{matrix}\right)+y\left(\begin{matrix}c\\d\end{matrix}\right) ，这个向量就是基B下的坐标为 (x,y) 的向量。这里看起来似乎就是：基A的向量要转换为基B下的坐标，只要乘以基B的基所构成的线性变换矩阵即可。但这就搞反了。 基A下的向量 \vec{v} = \left(\begin{matrix}x\\y\end{matrix}\right) 乘以线性变换矩阵得到的结果仍然是基A下的坐标，只是向量确实变成了基B下的向量 \vec{u} = \left(\begin{matrix}x\\y\end{matrix}\right) ，所以这个线性变换应该理解为：基A下的坐标对基B下的同一坐标误解的修正。看起来有点抽象，具体来讲的话就是，基B下的坐标(x,y)，实际上指的是向量 \vec{u} = x\left(\begin{matrix}a\\b\end{matrix}\right)+y\left(\begin{matrix}c\\d\end{matrix}\right) ，在基A下同一个向量指的是 \vec{u} = T\vec{v} = \left(\begin{matrix}a&c\\b&d\end{matrix}\right)\vec{v} ，这个向量是基A下的(x,y)进行线性变换后的结果，即要求基B的坐标在基A下的表示，只需要让基A下的同一坐标左乘线性变换矩阵即可。 所以线性变换指的是基B到基A的转换而不是基A到基B的转换。 结论： 若在基 B = \{\left(\begin{matrix}a\\b\end{matrix}\right), \left(\begin{matrix}c\\d\end{matrix}\right)\} 下一向量的坐标为 \left(\begin{matrix}x\\y\end{matrix}\right) ，则它在基 A=\{\left(\begin{matrix}1\\0\end{matrix}\right), \left(\begin{matrix}0\\1\end{matrix}\right)\} 下的坐标为： \left(\begin{matrix}a&c\\b&d\end{matrix}\right)\left(\begin{matrix}x\\y\end{matrix}\right) 既然B->A是坐标左乘线性变换矩阵，那么A->B就很容易推出是左乘线性变换矩阵的逆： 若在基 A=\{\left(\begin{matrix}1\\0\end{matrix}\right), \left(\begin{matrix}0\\1\end{matrix}\right)\} 下一向量的坐标为 \left(\begin{matrix}x\\y\end{matrix}\right) ，则它在基 B = \{\left(\begin{matrix}a\\b\end{matrix}\right), \left(\begin{matrix}c\\d\end{matrix}\right)\} 下的坐标为： \left(\begin{matrix}a&c\\b&d\end{matrix}\right)^{-1}\left(\begin{matrix}x\\y\end{matrix}\right) 线性变换在不同基下的表示 上面探讨了向量坐标在不同基下的表示，接下来看看不同坐标下的线性变换有什么不一样。 若在基A中有一线性变换L，这里L是一个矩阵，那么这个L在基B下的表达式是什么？ 首先考虑基B中一向量 \vec{v} ，先将它转换为基A下的坐标，若坐标转换矩阵（即基B的一对基组合成的矩阵）为P，则基B->基A的转换，得到基A下的同一向量的坐标为： P\vec{v} 然后进行基A的线性变换L，得到线性变换后的向量： LP\vec{v} 这是基A下的向量，最后将该线性变换后的基A下的向量再转换回基B： P^{-1}LP\vec{v} 所以基A下一线性变换L在基B下对应的线性变换为： L'=P^{-1}LP 即基B下向量要做一个和基A下的线性变换L效果一样（比如都是旋转90°）的线性变换，则只需让基B下的坐标左乘 L'=P^{-1}LP 即可。 特征向量和特征值 基本定义 设 A_{n\times n} ,如果有数 i 和n维非零列向量x，使 Ax= \lambda_ix (i=1,2,....,n) ，则称 \lambda_i  为 A 的特征值 , 非零列向量 x 为 A 的对应于特征值 i 的特征向量 注: 特征值 \lambda_i 是关于 \lambda 的多项式  |A − \lambda I_n| = 0 的根，记作 \lambda_1,\lambda_2,...,\lambda_n 特征向量 属于 \lambda_i 的特征向量是线性方程组 (A-\lambda_iI_n)x=0 的解 特征向量和特征值的几何意义 从线性变换的角度来看，特征值和特征向量非常好理解。根据特征方程： Ax= \lambda_ix(i=1,2,....,n) 把A看做一个线性变换，该线性变换的效果和向量数乘一样，说明该线性变换：会让某些向量保持原有的方向不变，仅在原来的方向上进行了拉伸。这些向量就是特征向量，拉伸的倍数就是特征值。所以一个矩阵的特征向量就是以这个矩阵为线性变换后，那些只在原来方向上进行了拉伸的向量就是该矩阵的特征向量，拉伸的倍数就是特征值。 由于在一个方向上的向量有无数多个，所以每一个特征值对应的特征向量有无数多个，而一个特征向量仅对应一个特征值。 特征方程的由来 特征方程 |A − \lambda I| = 0 用来求解特征值和特征向量，那么这个是怎么来的呢？ 由特征向量的几何意义： Ax = \lambda x \Rightarrow Ax - \lambda x = 0 \Rightarrow Ax-I\lambda x = 0 \Rightarrow (A-\lambda I)x = 0 因为 A-\lambda I 的结果是一个矩阵，看做线性变换的话，该矩阵使得向量 x 压缩成了一个数0！根据行列式的几何意义，只有当矩阵的行列式为0的时候，线性变换才会压缩向量的维度（这里被压缩成了0维），所以得到 |A-\lambda I| = 0 。 矩阵分解的基本定义 设 \{x_{i1} ,x_{i2} ,...,x_{im}\}  是方程组 (A−\lambda_i I_n)x=0 解空间的基，定义矩阵 P_{n\times n} =[x_{11} ,x_{12} ,...,x_{1m} ,x_{21} ,x_{22} ,... ] 那么，我们可以把方阵A分解成 P^{-1}AP = \left(\begin{matrix}\lambda_1&0&...&0\\0&\lambda_2&...&0\\...&...&...&0\\0&...&0&\lambda_n\end{matrix}\right) 或者 A=P\left(\begin{matrix}\lambda_1&0&...&0\\0&\lambda_2&...&0\\...&...&...&0\\0&...&0&\lambda_n\end{matrix}\right)P^{-1} 我们称这样的分解为特征分解(相似对角化)。 几何意义 同样按线性变换的角度来看。在之前提到了同一个线性变换在不同基下的表示。 把问题先简化到二维的情况，得出结论再推广到高维。 对于一个2x2矩阵A，如果我们知道它的两个线性无关的特征向量为 \vec{v_1} = \left(\begin{matrix}x_1\\y_1\end{matrix}\right)\vec{v_2}=\left(\begin{matrix}x_2\\y_2\end{matrix}\right) ，我们把这一对特征向量看做是新的一对基，称为特征基。其构成一个新的2x2矩阵 P =\left(\begin{matrix}x_1&x_2\\y_1&y_2\end{matrix}\right)  。 那么如果把矩阵A看做一个线性变换，无论它是怎样的一个变换效果，其对于它的两个线性无关的特征向量仅仅是一个拉伸效果而已（根据特征向量的定义 Ax = \lambda x ），所以如果我们把其中一对线性无关的特征向量作为新的基向量（特征基），那么在该新的基下，由于原线性变换的效果仅仅是对这对特征基进行了拉伸，那么用特征基表示的所有向量在进行线性变换时也就是拉伸了而已，所以这个线性变换用矩阵来表示一定是一个对角矩阵！ 根据上一章的不同基下的线性变换的表示，矩阵A在其特征基下 的线性变换表示为： A^{'} = P^{-1}AP = \left(\begin{matrix}x_1&x_2\\y_1&y_2\end{matrix}\right) ^{-1}A\left(\begin{matrix}x_1&x_2\\y_1&y_2\end{matrix}\right) 该矩阵必然是对角的才能保证其线性变换的效果仅仅是一个拉伸效果，且拉伸的倍数就是这对特征基对应的特征值，所以有 A^{'} = P^{-1}AP = \left(\begin{matrix}\lambda_1&0\\0&\lambda_2\end{matrix}\right) 这就是相似对角化的几何意义。当然如果一个矩阵找不到两个线性无关的特征向量，那么该矩阵无法进行相似对角化。 正交矩阵 满足 AA^T=I_n(A^{-1}= A^T ) 的n阶方阵称为正交矩阵 标准正交基 n个n维向量 x_1, x_2, ... , x_n \in R^n ，若满足如下性质 \left\{\begin{matrix}x_ix_j=1&当i=j时\\x_ix_j=0&当i\neq j时\end{matrix}\right. 则称 x_1, x_2, ... , x_n \in R^n 为一组标准正交基 说白了，标准正交基就是n维向量空间中的一组（n个）互相垂直&长度为一的向量，这些向量（列向量）排起来构成一个nxn的方阵就是正交矩阵。 例: \{(1,0,0) , (0,1,0) ,( 0,0,1)\} 为三维向量空间 R^3 的一组标准正交基 性质：若 A=[x_1,x_2, ... ,x_n] 为n阶正交矩阵 \Leftrightarrow\{x_1,x_2, ... ,x_n \in R^n\} 正交矩阵的几何意义 正交矩阵所表示的线性变换就是一个旋转变换！旋转矩阵 A = \left(\begin{matrix}\cos{\theta}&-\sin{\theta}\\\sin{\theta}&\cos{\theta}\end{matrix}\right) 就是一个正交矩阵(计算机图形学里的旋转矩阵)，它的两个列向量 \left(\begin{matrix}\cos{\theta}\\\sin{\theta}\end{matrix}\right) 和 \left(\begin{matrix}-\sin{\theta}\\\cos{\theta}\end{matrix}\right) 就是一对标准正交基。根据线性变换的性质，由于 \left(\begin{matrix}1\\0\end{matrix}\right) 和 \left(\begin{matrix}0\\1\end{matrix}\right) 是一对已知的标准正交基，把它们同时旋转任意角度θ也能满足互相垂直&长度为一的条件，所以它们旋转后的新基组成的矩阵就是旋转矩阵 A = \left(\begin{matrix}\cos{\theta}&-\sin{\theta}\\\sin{\theta}&\cos{\theta}\end{matrix}\right) ，是一个正交矩阵。 正交矩阵的性质 1. 若A是正交矩阵， \{ x_1, x_2, ... , x_n ∈ R^n\} 是一组标准正交基，那么 \{Ax_1,Ax_2,...,Ax_n \in R^n\} 也是一组标准正交基。（用几何意义来理解，把A看做旋转变换就很好理解了，任意的标准正交基一起旋转后还是标准正交基） 2. 对直角坐标系做旋转变换，新旧坐标之间关系是一个正交变换，即存在一个正交矩阵A，使得原来坐标的点 x= x_1,x_2,...,x_n 在新的坐标 系下的坐标为 y= Ax （这个就是几何意义的体现） 3. 正交变换保持内积、长度、距离不变，即任意的n维向量 x, y \in R^n ,有 内积不变 (x,y) = (Ax,Ay) ;长度不变 ||x||_2 = ||Ax||_2(取y=x) ;距离不变 ||x−y||_2 = ||Ax−Ay||_2(取x=x−y) 正交分解 如果一个矩阵可以进行特征分解（相似对角化），那么它就可以做正交分解。对于 A^{'} = P^{-1}AP ，如果P是一个正交矩阵，这波操作就叫做正交分解。 矩阵的SVD(奇异值分解) 虽然正交分解看起来非常漂亮，但是并不是所有矩阵都可以进行正交分解，对于任意的一般矩阵，我们也想把它分解成正交矩阵·对角矩阵·正交矩阵的形式，该如何来做呢？ 对于正交分解的效果，也就是 A = Q\Lambda Q^{-1}( \Lambda 是对角线元素为 \lambda_i 的对角矩阵) ，Q为正交矩阵，写成线性变换的形式，也就是 AQ = Q \Lambda ，也就是说A把一组标准正交基通过线性变换变成了标准正交基拉伸后的样子，拉伸倍数就是各基对应的特征值。我们仿照这样的思想，对于任意矩阵，能不能找到两个正交矩阵U和V，使得 AV=U\Sigma ，( \Sigma 是对角线元素为 \sigma_i 的对角矩阵)呢，也就是一组标准正交基V，通过线性变换A后还是正交的。 那么我们就有 A=U\Sigma V^{-1} ，因为V是正交矩阵，所以可以写成 A=U\Sigma V^T ，现在我们来看这三个矩阵 U,\Sigma,V 怎么来求。 非退化方阵的SVD 非退化方阵就是满秩方阵，行列式不为0。 设A是n阶非退化方阵，即 r(A)=n 。我们知道 AA^T 是一个实对称矩阵（易证 AA^T = (AA^T)^T ），其特征向量一定是正交的，可以正交分解，所以我们有 AA^T = U\Sigma V^T (U\Sigma V^T)^T = U\Sigma V^T V\Sigma ^T U^T 因为V是正交矩阵，所以中间两项 V^TV = I 也就是单位矩阵，所以有 AA^T = U\Sigma \Sigma^T U^T ，因为 \Sigma 是对角阵，所以 \Sigma \Sigma^T = \Sigma ^ 2 ，则 AA^T = U\Sigma ^2 U^T 。看这个形式是不是很眼熟？如果我们令 B = AA^T ，那么 B=U\Sigma^2 U^T 就是对B进行了正交分解，对角矩阵的值 \Sigma^2 = \Lambda ，也就是 \sigma_i^2 = \lambda_i,\lambda_i 为B的特征值。 这样我们对B进行正交分解，可以求出 \Sigma^2 和 U ，然后再用同样的操作，算 A^TA 则可以消去U，求出V，这里就不再操作了，这就是SVD分解。 这里要注意的是，要确保 U 的 \vec{u_i} 和V的 \vec{v_i} 方向一致，即最终得出U后奇异值必为正，那么我们求出V和 \Sigma 后，最好根据 A\vec{v_i} = \sigma_i\vec{u_i} 来求 \vec{u_i} 最终确定U(u_i , v_i  为矩阵U, V的列向量)。 还是举个例子。 A = \left(\begin{matrix}4&4\\-3&3\end{matrix}\right) ，求其奇异值分解。 首先求 A^TA = \left(\begin{matrix}4&-3\\4&3\end{matrix}\right) \left(\begin{matrix}4&4\\-3&3\end{matrix}\right) = \left(\begin{matrix}25&7\\7&25\end{matrix}\right) ，求其特征值和特征向量为 \lambda_1 = 32, \vec{x_1} = \left(\begin{matrix}1\\1\end{matrix}\right),\lambda_2 = 18, \vec{x_2}=\left(\begin{matrix}1\\-1\end{matrix}\right) 特征向量标准化（将向量长度变为1，使这组特征向量成为标准正交基） \vec{v_1} = \left(\begin{matrix}\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}\end{matrix}\right),\vec{v_2}=\left(\begin{matrix}\frac{1}{\sqrt{2}}\\-\frac{1}{\sqrt{2}}\end{matrix}\right) 所以奇异值为 \sigma_1 = \sqrt{32}, \sigma_2 = \sqrt{18} ，正交矩阵 V =(\vec{v_1},\vec{v_2})=\left(\begin{matrix}\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}&-\frac{1}{\sqrt{2}}\end{matrix}\right) 接下来根据 A\vec{v_i} = \sigma_i\vec{u_i} 求U A\vec{v_1} = \sigma_1\vec{u_1} = \sqrt{32}\vec{u_1}\Rightarrow\vec{u_1}=\left(\begin{matrix}1\\0\end{matrix}\right) A\vec{v_2} = \sigma_2\vec{u_2} = \sqrt{18}\vec{u_2}\Rightarrow\vec{u_2}=\left(\begin{matrix}0\\-1\end{matrix}\right) 所以A的奇异值分解为 A=U\Sigma V^T = \left(\begin{matrix}1&0\\0&-1\end{matrix}\right)\left(\begin{matrix}\sqrt{32}&0\\0&\sqrt{18}\end{matrix}\right)\left(\begin{matrix}\frac{1}{\sqrt{2}}&\frac{1}{\sqrt{2}}\\\frac{1}{\sqrt{2}}&-\frac{1}{\sqrt{2}}\end{matrix}\right) 一般矩阵的SVD 设A是秩为r (r > 0) 的mxn阶实矩阵，则存在m阶正交矩阵U和n阶正交矩阵V，使得 U^TAV = \left(\begin{matrix}\Sigma_r&0_{r\times(n-r)}\\0_{(m-r)\times r}&0_{(m-r)\times(n-r)}\end{matrix}\right) ,其中 \Sigma =diag (\sigma_1,\sigma_2,...,\sigma_r) A=U\left(\begin{matrix}\Sigma&0\\0&0\end{matrix}\right)V^T=\sigma_1u_1v_1^T+\sigma_2u_2v_2^T+⋯+\sigma_ru_rv_r^T u_i , v_i  为矩阵U, V的列向量 子空间 之前提到了线性空间（向量空间），如果空间中的任意元素可以表示为其他元素的线性组合（加法和数乘）即 v = ax + by , 其中 v 为空间 V 中任意元素， a,b\in R,x,y\in V ，则空间 V 是一个线性空间（向量空间）， V 中元素叫做向量。 向量空间的子集，如果也满足向量空间的条件，那么这个子集就叫做向量空间的子空间。 比如所有三维空间的向量构成的集合就是一个向量空间 (R^3) 。过三维空间原点的一个无限大的平面上所有的向量构成的集合是一个向量空间，所以该平面为三维向量空间 (R^3) 的子空间。 如果不过原点，则不满足条件：存在零元素。如果不无穷大，则必存在一个接近无穷大的实数，乘以空间中的一向量结果不在空间中，则不是向量空间。 同理，过原点的一条直线也是三维向量空间的子空间。 当然，最特殊的，原点这个点本身就是一个子空间。 另外，两个子空间的并集不一定也是向量空间，比如一条过原点的直线和一个过原点的平面，只有当直线刚好“躺”在平面上时，它们的并集才是一个向量空间，或者说，只有当其中一个子空间是另一个子空间的子空间（子集）时，它们的并集才是一个向量空间。很明显，它们的交集必是一个向量空间（必存在交集：零向量，或者说原点）。 矩阵的四个子空间 列空间(Columnspace) 可以证明：矩阵的列的所有线性组合是一个向量空间。大家可以自己尝试证明一下。矩阵A的列空间记作 C(A) 列空间的三种表示： 正常情况下，一个nxn的满秩方阵的列空间就是n维空间的所有向量( R^n )，因为满秩所以它的n个列向量是线性无关的，可以张成整个n维空间。 特殊情况： 拿3维向量来做例子比较好理解些，至少能在脑子里想出图形。 非满秩方阵，比如 A=\left(\begin{matrix}1&1&2\\1&2&4\\1&3&6\end{matrix}\right) 明显第二列和第三列是线性相关的，这两列提供的信息跟一列没区别，可以把第三列看做是没有贡献的一列，所以秩为2。谈几何意义的话，前两个向量 \left(\begin{matrix}1\\1\\1\end{matrix}\right) 和 \left(\begin{matrix}1\\2\\3\end{matrix}\right) 所在的平面包含了第三个向量 \left(\begin{matrix}2\\4\\6\end{matrix}\right) ，所以它们三个都在同一平面上，张成的空间维度为2，也就是秩为2，所以矩阵的列空间是一个二维平面，且该平面必过原点（因为这些向量都是从原点出发的）。 从线性变换的角度，该矩阵将三维空间中的向量通过线性变换后全部“压”到了一个平面上，就是 \left(\begin{matrix}1\\1\\1\end{matrix}\right) 和 \left(\begin{matrix}1\\2\\3\end{matrix}\right) 所在的平面。所以无论从哪个角度来看，这个平面就是矩阵的列空间！它就是列向量张成的空间！ 现在来看一个3行2列也就是3x2的矩阵： A=\left(\begin{matrix}1&1\\1&2\\1&3\end{matrix}\right) 其实就和上面非满秩的情况几乎一样！ 该矩阵只有两个列向量，所以只能张成一个过原点的平面，这个平面（上所有的向量）就是矩阵的列空间。 线性变换的效果和上面也是一样的，将任意三维向量“压”到了这个平面上，或者说投影到了这个平面上（投影这个思想非常重要，是理解最小二乘几何意义的核心）。 那么一个2行3列的情况呢，考虑： A=\left(\begin{matrix}1&1&1\\1&2&3\end{matrix}\right) 该矩阵有三列，但都是二维的，从线性变换的角度来看，它将原三维空间的一组标准正交基 \vec{i} = \left(\begin{matrix}1\\0\\0\end{matrix}\right),\vec{j}= \left(\begin{matrix}0\\1\\0\end{matrix}\right),\vec{k}= \left(\begin{matrix}0\\0\\1\end{matrix}\right) 给降维了，降成了 \vec{i} = \left(\begin{matrix}1\\1\end{matrix}\right),\vec{j}= \left(\begin{matrix}1\\2\end{matrix}\right),\vec{k}= \left(\begin{matrix}1\\3\end{matrix}\right) ，这三个就算有其中两个是线性相关的，只要和剩下一个线性无关，那么仍然能张成整个二维空间，算是多了一份“保底”。所以这个例子中的矩阵的列空间就是整个二维平面。 和3x2不一样的是，3x2表示的是三维空间中的一个过原点的平面，而2x3表示的就是二维空间本身。 零空间(Nullspace) 理解了列空间，那么零空间就可以直接秒杀了。从线性变换的角度来看，那些所有经过线性变换后被压缩到原点的向量构成的集合就是矩阵的零空间，所以零空间同时也是线性方程组 Ax = 0 的解。 矩阵A的零空间记作 N(A) 行空间(Rowspace) 和列空间类似，矩阵的所有的行向量的线性组合，就是矩阵的行空间。我不太喜欢行向量，我还是喜欢列向量，那行向量和列向量如何来转换呢，很明显就是转置了。所以矩阵A的行空间也就是矩阵A转置的列空间，即 R(A) = C(A^T) , 这样一转，那么再根据上面的列向量的相关理解，行向量就不再赘述了。 左零空间(LeftNullspace) 和行空间与列空间之间的转换类似，四个子空间的最后一个子空间就是A转置的零空间，也就是 N(A^T) ，同样也不再赘述。 维数 刚才提到过，对于3x2的矩阵A，其列空间是在三维空间中的，但是张成的是一个平面，也就是说对于 A_{m\times n} ，m决定了列空间所在的空间维数，即 A_{m\times n} 的列空间在 R^m 空间中。而n决定了列空间本身最大可能的维数（本身维数应为秩r）。 而对于 A_{m\times n} 的零空间，在几维空间中的向量才有可能被它压缩成0向量呢？若考虑线性变换，也就是所有符合 Ax = 0 的 x ，我们知道， x 必须是n维向量。即 A_{m\times n} 的零空间在 R^n 空间中。 对应的，行空间和左零空间则分别在 R^n 和 R^m 空间中。 总结一下就是，对于矩阵 A_{m\times n} C(A)\in R^m, N(A)\in R^n, C(A^T)\in R^n,N(A^T)\in R^m 也就是说，列空间与左零空间在同一维度中，行空间与零空间在同一维度中。 行空间和列空间维数相同，即 r(A) = r(A^T) 。注意这里的维数指的是矩阵的秩，比如在三维空间下的一个平面，就是一个三行三列但秩为2的矩阵张成。零空间的维数为n-r，左零空间的维数为m-r，这个暂时不证明了，因为要用到高斯-若尔当消元。 子空间的投影 为了更形象的从几何的角度解释最小二乘，我们先来研究一下关于“投影”的操作。 如图，两过原点的向量a和b，b向a作投影得到p（这里a的一部分被p覆盖了），e为误差，垂直于p，之所以说e为误差，是由向量减法可知 \vec{e} = \vec{b} - \vec{p} 可以看到p和a共线，也就是 p = xa = ax,x为常数，则有 e = b-p = b - ax 。 e垂直于a \Rightarrow a^Te = a^T(b-ax) = 0 展开后得到 a^Tax=a^Tb ，其中 a^Ta 是行向量乘以列向量，结果就是一个数，所以 x=\frac{a^Tb}{a^Ta}, p = ax = a\frac{a^Tb}{a^Ta} = (\frac{aa^T}{a^Ta})b 。 即得到了 p = (\frac{aa^T}{a^Ta})b 令 P = \frac{aa^T}{a^Ta}, p = Pb ，也就是从线性变换的角度看，矩阵 P 将平面中的向量投影到a上，那么很明显 P 的列空间就是a所在的直线，也就是说 r(P)=1 。 P 是对称的，因为 aa^T = (aa^T)^T 。 如果对某个向量投影后再投影一次，结果仍然不变，其实无论投影多少次，还是那个结果，比如把b投影以后变成p，再对p作投影，结果还是p，相当于 Px=P^2x=P^nx ，所以 P=P^2=P^n 。 现在我们把这个结论拓展到高维： 在三维空间坐标系中，有一过原点的无限大的平面a，所以这是一个在 R^3 中的2维空间，或者说是 R^3 的子空间。该平面由矩阵 A_{3\times 2}=(a_1,a_2) 张成（即矩阵A的列空间， a_1,a_2 为两个三维列向量）。过原点有一向量b，b在a上的投影为p，误差为e，即 e = b-p 。 既然p是平面a上一向量，则可以用基来表示： p=a_1x_1+a_2x_2= Ax ,其中 x=\left(\begin{matrix}x_1\\x_2\end{matrix}\right)\Rightarrow e = b-Ax ，而e垂直于平面a，则垂直于平面的基 a_1,a_2 ，有： \left\{\begin{matrix}a_1^Te=a_1^T(b-Ax)=0\\a_2^Te=a_2^T(b-Ax)=0\end{matrix}\right.\Rightarrow\left(\begin{matrix}a_1^T\\a_2^T\end{matrix}\right)(b-Ax) = \left(\begin{matrix}0\\0\end{matrix}\right) \Rightarrow A^T(b-Ax) = 0\Rightarrow A^TAx=A^Tb \Rightarrow x=(A^TA)^{-1}A^Tb \Rightarrow p = Ax = A(A^TA)^{-1}A^Tb = Pb 我们一口气就拿到了投影矩阵 P = A(A^TA)^{-1}A^T ，实在是舒服。 该矩阵将空间中的任意向量投影到A的列空间上，或者说任意向量做P的线性变换得到的结果就是该向量在a上的投影。 同样来验证两个性质： P = P^T,P = P^2 = P^n 第一个性质： P^T = (A(A^TA)^{-1}A^T)^T = (A^T)^T((A^TA)^{-1})^TA^T = A(A^TA)^{-1}A^T=P 得证。 第二个性质： P^2 = (A(A^TA)^{-1}A^T)(A(A^TA)^{-1}A^T) = A(A^TA)^{-1}(A^TA(A^TA)^{-1})A^T =A(A^TA)^{-1}A^T=P 得证。 最后再来看两个特殊情况： 第一个问题，如果b就在A的列空间中，则 b = Ax , Pb =( A(A^TA)^{-1}A^T) (Ax) = A((A^TA)^{-1}A^TA)x = Ax = b \Rightarrow Pb = b 也就是说对于列空间中的向量，向列空间作投影得到的向量就是它本身。 第二个问题，如果b垂直于A的列空间，即 A^Tb = 0 ， Pb = A(A^TA)^{-1}A^Tb = A(A^TA)^{-1} 0 = 0 也就是说，b处于A的左零空间，左零空间（里的所有向量）垂直于列空间（里的所有向量）。同样的，零空间垂直于行空间。 所以在上面的等式 b=p+e 中，p是列空间里面的向量，e是左零空间的向量。 最小二乘 关于最小二乘的公式其实非常简单： (A^TA)\hat{x}=A^Tb ，其中 \hat{x} 是线性方程组 Ax=b 的最小二乘解。但是为什么公式是这样的呢？有了上一章投影的概念，这里理解起来就很简单了。先来看个例子，如图 在平面直角坐标系中有3个点，分别是 (1,1),(2,2),(3,2) ，找一条直线同时穿过这三个点，很明显这是不可能的。用代数的语言来讲，也就是方程组 \left\{\begin{matrix}C+D=1\\2C+D=2\\3C+D=2\end{matrix}\right. 无解（设 y=Cx+D ），用矩阵的形式来重写这个方程组，也就是： \left(\begin{matrix}1&1\\2&1\\3&1\end{matrix}\right)\left(\begin{matrix}C\\D\end{matrix}\right)=\left(\begin{matrix}1\\2\\2\end{matrix}\right) 但是我们能找到它的近似解，也就是传说中的最小二乘解。 也就是找到一条直线，它的误差平方的总和最小： 我们设这条直线为 A\hat{x} = p 即 \left(\begin{matrix}1&1\\2&1\\3&1\end{matrix}\right)\left(\begin{matrix}\hat{C}\\\hat{D}\end{matrix}\right)=\left(\begin{matrix}p_1\\p_2\\p_3\end{matrix}\right) 其中p在A的列空间中，或者说p就是这条直线上面的点。再令 b =\left(\begin{matrix}b_1\\b_2\\b_3\end{matrix}\right) = \left(\begin{matrix}1\\2\\2\end{matrix}\right) 那么三个点的误差分别为 e_1=b_1-p_1,e_2=b_2-p_2,e_3=b_3-p_3 ，要使误差最小，即 e_1^2+e_2^2+e_3^2 最小，也就是误差向量 e=\left(\begin{matrix}e_1\\e_2\\e_3\end{matrix}\right) 的长度最小。 而我们又有 e = b - p , 即如图的关系 则要使e的长度最小，那么只能e⊥p！又因为p在A的列空间中，所以p是b在A的列空间的投影！ 好了，到这一步就非常明确了，根据上一章的知识，我们知道一旦满足p是b在A的列空间的投影，则有 p = A(A^TA)^{-1}A^Tb 而 A\hat{x} = p ，所以 A(A^TA)^{-1}A^Tb = A\hat{x}\Rightarrow (A^TA)^{-1}A^Tb = \hat{x}\Rightarrow (A^TA)\hat{x}=A^Tb 这就是最小二乘。 现在我们把这个例子的最小二乘解求出来。 根据方程 (A^TA)\hat{x}=A^Tb ，等式左边等于： (A^TA)\hat{x} = \left(\begin{matrix}1&2&3\\1&1&1\end{matrix}\right)\left(\begin{matrix}1&1\\2&1\\3&1\end{matrix}\right) \left(\begin{matrix}\hat{C}\\\hat{D}\end{matrix}\right)=\left(\begin{matrix}14&6\\6&3\end{matrix}\right)\left(\begin{matrix}\hat{C}\\\hat{D}\end{matrix}\right) 右边等于： \left(\begin{matrix}1&2&3\\1&1&1\end{matrix}\right)\left(\begin{matrix}1\\2\\2\end{matrix}\right) = \left(\begin{matrix}11\\5\end{matrix}\right) 则方程组为 \left(\begin{matrix}14&6\\6&3\end{matrix}\right)\left(\begin{matrix}\hat{C}\\\hat{D}\end{matrix}\right) =  \left(\begin{matrix}11\\5\end{matrix}\right) \Rightarrow \left\{\begin{matrix}14\hat{C}+6\hat{D}=11\\6\hat{C}+3\hat{D}=5\end{matrix}\right. 解得 \hat{C} = \frac{1}{2},\hat{D}=\frac{2}{3} ，则所求的线性回归直线的表达式为 y=\frac{1}{2}x+\frac{2}{3}