强撸MIT18.06灰飞烟灭(一)

第一讲:方程组的几何解释

我们从求解线性方程组来开始这门课,从一个普通的例子讲起:方程组有2个未知数,一共有2个方程,分别来看方程组的“行图像”和“列图像”。

有方程组{2xy=0x+2y=3,写作矩阵形式有[2112][xy]=[03],通常我们把第一个矩阵称为系数矩阵A,将第二个矩阵称为向量x,将第三个矩阵称为向量b,于是线性方程组可以表示为Ax=b

我们来看行图像,即直角坐标系中的图像:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns

x = [-2, 2, -2, 2]
y = [-4, 4, 0.5, 2.5]

fig = plt.figure()
plt.axhline(y=0, c='black')
plt.axvline(x=0, c='black')

plt.plot(x[:2], y[:2], x[2:], y[2:])

plt.draw()

png

plt.close(fig)

上图是我们都很熟悉的直角坐标系中两直线相交的情况,接下来我们按列观察方程组x[21]+y[12]=[03](我们把第一个向量称作col1,第二个向量称作col2,以表示第一列向量和第二列向量),要使得式子成立,需要第一个向量加上两倍的第二个向量,即1[21]+2[12]=[03]

现在来看列图像,在二维平面上画出上面的列向量:

from functools import partial

fig = plt.figure()
plt.axhline(y=0, c='black')
plt.axvline(x=0, c='black')
ax = plt.gca()
ax.set_xlim(-2.5, 2.5)
ax.set_ylim(-3, 4)

arrow_vector = partial(plt.arrow, width=0.01, head_width=0.1, head_length=0.2, length_includes_head=True)

arrow_vector(0, 0, 2, -1, color='g')
arrow_vector(0, 0, -1, 2, color='c')
arrow_vector(2, -1, -2, 4, color='b')
arrow_vector(0, 0, 0, 3, width=0.05, color='r')

plt.draw()

png

plt.close(fig)

如图,绿向量col1与蓝向量(两倍的蓝绿向量col2)合成红向量b

接着,我们继续观察x[21]+y[12]=[03]col1,col2的某种线性组合得到了向量b,那么col1,col2的所有线性组合能够得到什么结果?它们将铺满整个平面。

下面进入三个未知数的方程组:{2xy=0x+2yz=13y+4z=4,写作矩阵形式A=[210121034], b=[014]

在三维直角坐标系中,每一个方程将确定一个平面,而例子中的三个平面会相交于一点,这个点就是方程组的解。

同样的,将方程组写成列向量的线性组合,观察列图像:x[210]+y[123]+z[014]=[014]。易知教授特意安排的例子中最后一个列向量恰巧等于等式右边的b向量,所以我们需要的线性组合为x=0,y=0,z=1。假设我们令b=[113],则需要的线性组合为x=1,y=1,z=0

我们并不能总是这么轻易的求出正确的线性组合,所以下一讲将介绍消元法——一种线性方程组的系统性解法。

现在,我们需要考虑,对于任意的b,是否都能求解Ax=b?用列向量线性组合的观点阐述就是,列向量的线性组合能否覆盖整个三维向量空间?对上面这个例子,答案是肯定的,这个例子中的A是我们喜欢的矩阵类型,但是对另一些矩阵,答案是否定的。那么在什么情况下,三个向量的线性组合得不到b

——如果三个向量在同一个平面上,问题就出现了——那么他们的线性组合也一定都在这个平面上。举个例子,比如col3=col1+col2,那么不管怎么组合,这三个向量的结果都逃不出这个平面,因此当b在平面内,方程组有解,而当b不在平面内,这三个列向量就无法构造出b。在后面的课程中,我们会了解到这种情形称为奇异矩阵不可逆

下面我们推广到九维空间,每个方程有九个未知数,共九个方程,此时已经无法从坐标图像中描述问题了,但是我们依然可以从求九维列向量线性组合的角度解决问题,仍然是上面的问题,是否总能得到b?当然这仍取决于这九个向量,如果我们取一些并不相互独立的向量,则答案是否定的,比如取了九列但其实只相当于八列,有一列毫无贡献(这一列是前面列的某种线性组合),则会有一部分b无法求得。

接下来介绍方程的矩阵形式Ax=b,这是一种乘法运算,举个例子,取A=[2513], x=[12],来看如何计算矩阵乘以向量:

  • 我们依然使用列向量线性组合的方式,一次计算一列,[2513][12]=1[21]+2[53]=[127]
  • 另一种方法,使用向量内积,矩阵第一行向量点乘x向量[25][12]T=12, [13][12]T=7

教授建议使用第一种方法,将Ax看做A列向量的线性组合。

第二讲:矩阵消元

这个方法最早由高斯提出,我们以前解方程组的时候都会使用,现在来看如何使用矩阵实现消元法。

消元法

有三元方程组{x+2y+z=23x+8y+z=124y+z=2,对应的矩阵形式Ax=b[121381041][xyz]=[2122]

按照我们以前做消元法的思路:

  • 第一步,我们希望在第二个方程中消去x项,来操作系数矩阵A=[1_21381041],下划线的元素为第一步的主元(pivot):[1_21381041]row23row1[1_21022041]

    这里我们先不管b向量,等做完A的消元可以再做b的消元。(这是MATLAB等工具经常使用的算法。)

  • 第二步,我们希望在第三个方程中消去y项,现在第二行第一个非零元素成为了第二个主元:[1_2102_2041]row32row2[1_2102_2005_]

    注意到第三行消元过后仅剩一个非零元素,所以它就成为第三个主元。做到这里就算消元完成了。

再来讨论一下消元失效的情形:首先,主元不能为零;其次,如果在消元时遇到主元位置为零,则需要交换行,使主元不为零;最后提一下,如果我们把第三个方程z前的系数改成4,会导致第二步消元时最后一行全部为零,则第三个主元就不存在了,至此消元不能继续进行了,这就是下一讲中涉及的不可逆情况。

  • 接下来就该回代(back substitution)了,这时我们在A矩阵后面加上b向量写成增广矩阵(augmented matrix)的形式:[Ab]=[1212381120412][121202260412][1212022600510]

    不难看出,z的解已经出现了,此时方程组变为{x+2y+z=22y2z=65z=10,从第三个方程求出z=2,代入第二个方程求出y=1,再代入第一个方程求出x=2

消元矩阵

上一讲我们学习了矩阵乘以向量的方法,有三个列向量的矩阵乘以另一个向量,按列的线性组合可以写作[v1 v2 v3][345]=3v1+4v2+5v3

但现在我们希望用矩阵乘法表示行操作,则有[127][row1row2row3]=1row1+2row2+7row3。易看出这里是一个行向量从左边乘以矩阵,这个行向量按行操作矩阵的行向量,并将其合成为一个矩阵行向量的线性组合。

介绍到这里,我们就可以将消元法所做的行操作写成向量乘以矩阵的形式了。

  • 消元法第一步操作为将第二行改成row23row1,其余两行不变,则有[100310001][121381041]=[121022041](另外,如果三行都不变,消元矩阵就是单位矩阵I=[100010001]I之于矩阵运算相当于1之于四则运算。)这个消元矩阵我们记作E21,即将第二行第一个元素变为零。

  • 接下来就是求E32消元矩阵了,即将第三行第二个元素变为零,则[100010021][121022041]=[121022005]。这就是消元所用的两个初等矩阵(elementary matrix)。

  • 最后,我们将这两步综合起来,即E32(E21A)=U,也就是说如果我们想从A矩阵直接得到U矩阵的话,只需要(E32E21)A即可。注意,矩阵乘法虽然不能随意变动相乘次序,但是可以变动括号位置,也就是满足结合律(associative law),而结合律在矩阵运算中非常重要,很多定理的证明都需要巧妙的使用结合律。

既然提到了消元用的初等矩阵,那我们再介绍一种用于置换两行的矩阵:置换矩阵(permutation matrix):例如[0110][abcd]=[cdab],置换矩阵将原矩阵的两行做了互换。顺便提一下,如果我们希望交换两列,则有[abcd][0110]=[badc]

我们现在能够将A通过行变换写成U,那么如何从U再变回A,也就是求消元的逆运算。对某些“坏”矩阵,并没有逆,而本讲的例子都是“好”矩阵。

现在,我们以E21为例,[?][100310001]=[100010001],什么矩阵可以取消这次行变换?这次变换是从第二行中减去三倍的第一行,那么其逆变换就是给第二行加上三倍的第一行,所以逆矩阵就是[100310001]

我们把矩阵E的逆记作E1,所以有E1E=I

第三讲:乘法和逆矩阵

上一讲大概介绍了矩阵乘法和逆矩阵,本讲就来做进一步说明。

矩阵乘法

  • 行列内积:有m×n矩阵An×p矩阵BA的总列数必须与B的总行数相等),两矩阵相乘有AB=CC是一个m×p矩阵,对于C矩阵中的第i行第j列元素cij,有:

    cij=rowicolumnj=k=inaikbkj

    其中aikA矩阵的第i行第k列元素,bkjB矩阵的第k行第j列元素。

    可以看出cij其实是A矩阵第i行点乘B矩阵第j[rowi][columnj]=[cij]

  • 整列相乘:上一讲我们知道了如何计算矩阵乘以向量,而整列相乘就是使用这种线性组合的思想:

    [Acol1Acol2Acoln][b1jb2jbnj]=[(b1jAcol1+b2jAcol2++bnjAcoln)]

    上面的运算为B的第j个列向量右乘矩阵A,求得的结果就是C矩阵的第j列,即C的第j列是A的列向量以B的第j列作为系数所求得的线性组合,Cj=b1jAcol1+b2jAcol2++bnjAcoln

  • 整行相乘:同样的,也是利用行向量线性组合的思想:

    [ai1ai2ain][Brow1Brow2Brown]=[(ai1Brow1+ai2Brow2++ainBrown)]

    上面的运算为A的第i个行向量左乘矩阵B,求得的结果就是C矩阵的第i行,即C的第i行是B的行向量以A的第i行作为系数所求的的线性组合,Ci=ai1Brow1+ai2Brow2++ainBrown

  • 列乘以行:用A矩阵的列乘以B矩阵的行,得到的矩阵相加即可:

    [Acol1Acol2Acoln][Brow1Brow2Brown]=Acol1Brow1+Acol2Brow2++AcolnBrown

    注意,AcoliBrowi是一个m×1向量乘以一个1×p向量,其结果是一个m×p矩阵,而所有的m×p矩阵之和就是计算结果。

  • 分块乘法:[A1A2A3A4][B1B2B3B4]=[A1B1+A2B3A1B2+A2B4A3B1+A4B3A3B2+A4B4]

    在分块合适的情况下,可以简化运算。

逆(方阵)

首先,并不是所有的方阵都有逆;而如果逆存在,则有A1A=I=AA1。教授这里提前剧透,对于方阵,左逆和右逆是相等的,但是对于非方阵(长方形矩阵),其左逆不等于右逆。

对于这些有逆的矩阵,我们称其为可逆的或非奇异的。我们先来看看奇异矩阵(不可逆的):A=[1236],在后面将要学习的行列式中,会发现这个矩阵的行列式为0

观察这个方阵,我们如果用另一个矩阵乘A,则得到的结果矩阵中的每一列应该都是[12]的倍数,所以我们不可能从AB的乘积中得到单位矩阵I

另一种判定方法,如果存在非零向量x,使得Ax=0,则矩阵A不可逆。我们来用上面的矩阵为例:[1236][31]=[00]

证明:如果对于非零的x仍有Ax=0,而A有逆A1,则A1Ax=0,即x=0,与题设矛盾,得证。

现在来看看什么矩阵有逆,设A=[1327],我们来求A1[1327][abcd]=[1001],使用列向量线性组合的思想,我们可以说A乘以A1的第j列,能够得到I的第j列,这时我会得到一个关于列的方程组。

接下来介绍高斯-若尔当(Gauss-Jordan)方法,该方法可以一次处理所有的方程:

  • 这个方程组为{[1327][ab]=[10][1327][cd]=[01],我们想要同时解这两个方程;

  • 构造这样一个矩阵[13102701],接下来用消元法将左侧变为单位矩阵;

  • [13102701]row22row1[13100121]row13row2[10730121]

  • 于是,我们就将矩阵从[AI]变为[IA1]

而高斯-若尔当法的本质是使用消元矩阵E,对A进行操作,E[AI],利用一步步消元有EA=I,进而得到[IE],其实这个消元矩阵E就是A1,而高斯-若尔当法中的I只是负责记录消元的每一步操作,待消元完成,逆矩阵就自然出现了。

第四讲:ALU 分解

AB的逆矩阵:

AA1=I=A1A(AB)(B1A1)=IAB的逆矩阵为B1A1

AT的逆矩阵:

(AA1)T=IT(A1)TAT=IAT的逆矩阵为(A1)T

将一个 n 阶方阵 A 变换为 LU 需要的计算量估计:

  1. 第一步,将a11作为主元,需要的运算量约为n2

[a11a12a1na21a22a2nan1an2ann][a11a12a1n0a22a2n00an2ann]

  1. 以此类推,接下来每一步计算量约为(n1)2(n2)22212

  2. 则将 A 变换为 LU 的总运算量应为O(n2+(n1)2++22+12),即O(n33)

置换矩阵(Permutation Matrix):

3阶方阵的置换矩阵有6个:

[100010001][010100001][001010100][100001010][010001100][001100010]

n阶方阵的置换矩阵有(n1)=n!个。

第五讲:转换、置换、向量空间R

置换矩阵(Permutation Matrix)

P为置换矩阵,对任意可逆矩阵A有:

PA=LU

n阶方阵的置换矩阵P(n1)=n!

对置换矩阵P,有PTP=I

即$P^T = P^{-1}

转置矩阵(Transpose Matrix)

(AT)ij=(A)ji

对称矩阵(Symmetric Matrix)

AT = A

对任意矩阵RRTR为对称矩阵:

(RTR)T=(R)T(RT)T=RTR(RTR)T=RTR

向量空间(Vector Space)

所有向量空间都必须包含原点(Origin);

向量空间中任意向量的数乘、求和运算得到的向量也在该空间中。
即向量空间要满足加法封闭和数乘封闭。

第六讲:列空间和零空间

对向量子空间ST,有ST也是向量子空间。

m×n矩阵An×1矩阵xm×1矩阵b,运算Ax=b

[a11a12a1(n1)a1na21a22a2(n1)a2nam1am2am(n1)amn][x1x2xn1xn]=[b1b2bm]

A的列向量生成的子空间为A的列空间;

Ax=b有非零解当且仅当b属于A的列空间

A的零空间是Ax=0x的解组成的集合。

第七讲:求解Ax=0,主变量,特解

举例:3×4矩阵
A=[1222246836810],求Ax=0的特解:

找出主变量(pivot variable):

A=[1222246836810][1_222002_40000]=U

主变量(pivot variable,下划线元素)的个数为2,即矩阵A的秩(rank)为2,即r=2

主变量所在的列为主列(pivot column),其余列为自由列(free column)。

自由列中的变量为自由变量(free variable),自由变量的个数为nr=42=2

通常,给自由列变量赋值,去求主列变量的值。如,令x2=1,x4=0求得特解
x=c1[2100]
再令x2=0,x4=1求得特解
x=c2[2021]

该例还能进一步简化,即将U矩阵化简为R矩阵(Reduced row echelon form),即简化行阶梯形式。

在简化行阶梯形式中,主元上下的元素都是0

U=[1_222002_40000][1_202001_20000]=R

R矩阵中的主变量放在一起,自由变量放在一起(列交换),得到

R=[1_202001_20000][102201020000]=[IF00],其中I为单位矩阵,F为自由变量组成的矩阵

计算零空间矩阵N(nullspace matrix),其列为特解,有RN=0

xpivot=Fxfree[IF][xpivotxfree]=0N=[FI]

在本例中
N=[22021001],与上面求得的两个x特解一致。

另一个例子,矩阵
A=[1232462682810][123022000000][101011000000]=R

矩阵的秩仍为r=2,有2个主变量,1个自由变量。

同上一例,取自由变量为x3=1,求得特解
x=c[111]

第八讲:求解Ax=b:可解性和解的结构

举例,同上一讲:3×4矩阵
A=[1222246836810],求Ax=b的特解:

写出其增广矩阵(augmented matrix)[Ab]

[1222b12468b236810b3][1222b10024b22b10000b3b2b1]

显然,有解的必要条件为b3b2b1=0

讨论b满足什么条件才能让方程Ax=b有解(solvability condition on b):当且仅当b属于A的列空间时。另一种描述:如果A的各行线性组合得到0行,则b端分量做同样的线性组合,结果也为0时,方程才有解。

解法:令所有自由变量取0,则有{x1+2x3=12x3=3
,解得
{x1=2x3=32
,代入Ax=b求得特解
xp=[20320]

Ax=b成立的所有解:

{(1)Axp=b(2)Axn=0A(xp+xn)=b

Ax=b的解集为其特解加上零空间,对本例有:
xcomplete=[20320]+c1[2100]+c2[2021]

对于m×n矩阵A,有矩阵A的秩rmin(m,n)

列满秩r=n情况:
A=[13216151]
rank(A)=2,要使Ax=b,b0有非零解,b必须取A中各列的线性组合,此时A的零空间中只有0向量。

行满秩r=m情况:
A=[12653111]
rank(A)=2bRmx0,因为此时A的列空间为RmbRm恒成立,组成A的零空间的自由变量有n-r个。

行列满秩情况:r=m=n,如
A=[1234]
,则A最终可以化简为R=I,其零空间只包含0向量。

总结:

r=m=nr=n<mr=m<nr<m,r<nR=IR=[I0]R=[IF]R=[IF00]1 solution0 or 1 solution solution0 or  solution

第九讲:线性相关性、基、维数

v1, v2, , vnm×n矩阵A的列向量:

如果A零空间中有且仅有0向量,则各向量线性无关,rank(A)=n

如果存在非零向量c使得Ac=0,则存在线性相关向量,rank(A)<n

向量空间S中的一组基(basis),具有两个性质:

  1. 他们线性无关;
  2. 他们可以生成S

对于向量空间Rn,如果n个向量组成的矩阵为可逆矩阵,则这n个向量为该空间的一组基,而数字n就是该空间的维数(dimension)。

举例:
A=[123111211231]
,A的列向量线性相关,其零空间中有非零向量,所以rank(A)=2==

可以很容易的求得Ax=0的两个解,如
x1=[1110],x2=[1001],根据前几讲,我们知道特解的个数就是自由变量的个数,所以nrank(A)=2==

我们得到:列空间维数dimC(A)=rank(A),零空间维数dimN(A)=nrank(A)

第十讲 四个基本子空间

对于m×n矩阵Arank(A)=r有:

  • 行空间C(AT)Rn,dimC(AT)=r,基见例1。

  • 零空间N(A)Rn,dimN(A)=nr,自由元所在的列即可组成零空间的一组基。

  • 列空间C(A)Rm,dimC(A)=r,主元所在的列即可组成列空间的一组基。

  • 左零空间N(AT)Rm,dimN(AT)=mr,基见例2。

例1,对于行空间
A=[123111211231][101101100000]=R

由于我们做了行变换,所以A的列空间受到影响,C(R)C(A),而行变换并不影响行空间,所以可以在R中看出前两行就是行空间的一组基。

所以,可以得出无论对于矩阵A还是R,其行空间的一组基,可以由R矩阵的前r行向量组成(这里的R就是第七讲提到的简化行阶梯形式)。

例2,对于左零空间,有ATy=0(ATy)T=0TyTA=0T,因此得名。

采用Gauss-Jordan消元,将增广矩阵[Am×nIm×m]A的部分划为简化行阶梯形式[Rm×nEm×m],此时矩阵E会将所有的行变换记录下来。

EA=R,而在前几讲中,有当Am阶可逆方阵时,R即是I,所以E就是A1

本例中

[Am×nIm×m]=[123110011210101231001][101112001101100000101]=[Rm×nEm×m]

EA=[120110101][123111211231]=[101101100000]=R

很明显,式中E的最后一行对A的行做线性组合后,得到R的最后一行,即0向量,也就是yTA=0T

最后,引入矩阵空间的概念,矩阵可以同向量一样,做求和、数乘。

举例,设所有3×3矩阵组成的矩阵空间为M。则上三角矩阵、对称矩阵、对角矩阵(前两者的交集)。

观察一下对角矩阵,如果取
[100000000][100030000][000000007]
,可以发现,任何三阶对角矩阵均可用这三个矩阵的线性组合生成,因此,他们生成了三阶对角矩阵空间,即这三个矩阵是三阶对角矩阵空间的一组基。

第十一讲:矩阵空间、秩1矩阵和小世界图

矩阵空间

接上一讲,使用3×3矩阵举例,其矩阵空间记为M

M的一组基为:
[100000000][010000000][001000000][000100000][000010000][000001000][000000100][000000010][000000001]

易得,dimM=9

所以可以得出,对上讲中的三阶对称矩阵空间有dimS=6、上三角矩阵空间有dimU=6、对角矩阵空间有dimD=3

求并(intersect):SU=D,dim(SU)=9

求交(sum):SU=M,dim(SU)=3

可以看出:dimS+dimU=12=dim(SU)+dim(SU)

另一个例子来自微分方程:

d2ydx2+y=0,即y+y=0

方程的解有:y=cosx,y=sinx,y=eix,y=eix等等(eix=cosx+isinx,eix=cosxisinx

而该方程的所有解:y=c1cosx+c2sinx

所以,该方程的零空间的一组基为cosx,sinx,零空间的维数为2。同理eix,eix可以作为另一组基。

秩一矩阵

2×3矩阵A=[1452810]=[12][145]

dimC(A)=1=dimC(AT),所有的秩一矩阵都可以划为A=UVT的形式,这里的U,V均为列向量。

秩一矩阵类似“积木”,可以搭建任何矩阵,如对于一个5×17秩为4的矩阵,只需要4个秩一矩阵就可以组合出来。

M代表所有5×17M中所有秩4矩阵组成的集合并不是一个子空间,通常两个秩四矩阵相加,其结果并不是秩四矩阵。

现在,在R4空间中有向量v=[v1v2v3v4],取R4中满足v1+v2+v3+v4=0的所有向量组成一个向量空间S,则S是一个向量子空间。

易看出,不论是使用系数乘以该向量,或是用两个满足条件的向量相加,其结果仍然落在分量和为零的向量空间中。

S的维数:

从另一个角度看,v1+v2+v3+v4=0等价于[1111][v1v2v3v4]=0,则S就是A=[1111]的零空间。

rank(A)=1,则对其零空间有rank(N(A))=nr=3=dimN(A),则S的维数是3

顺便看一下1×4矩阵A的四个基本子空间:

行空间:dimC(AT)=1,其中的一组基是[1111]

零空间:dimN(A)=3,其中的一组基是[1100][1010][1001]

列空间:dimC(A)=1,其中一组基是[1],可以看出列空间就是整个R1空间。

左零空间:dimN(AT)=0,因为A转置后没有非零的v可以使Av=0成立,就是[0]

综上,dimC(AT)+dimN(A)=4=n,dimC(A)+dimN(AT)=1=m

小世界图

图(graph)由节点(node)与边(edge)组成。

假设,每个人是图中的一个节点,如果两个人为朋友关系,则在这两个人的节点间添加一条边,通常来说,从一个节点到另一个节点只需要不超过6步(即六条边)即可到达。

第十二讲:图和网络

图和网络

import networkx as nx
import matplotlib.pyplot as plt
%matplotlib inline

dg = nx.DiGraph()
dg.add_edges_from([(1,2), (2,3), (1,3), (1,4), (3,4)])
edge_labels = {(1, 2): 1, (1, 3): 3, (1, 4): 4, (2, 3): 2, (3, 4): 5}

pos = nx.spring_layout(dg)
nx.draw_networkx_edge_labels(dg,pos,edge_labels=edge_labels, font_size=16)
nx.draw_networkx_labels(dg, pos, font_size=20, font_color='w')
nx.draw(dg, pos, node_size=1500, node_color="gray")

png

该图由4个节点与5条边组成,

node1node2node3node4edge11100edge20110edge31010edge41001edge50011

我们可以建立5×4矩阵
A=[11000110101010010011]

观察前三行,易看出这三个行向量线性相关,也就是这三个向量可以形成回路(loop)。

现在,解Ax=0
Ax=[11000110101010010011][x1x2x3x4]

展开得到:
[x2x1x3x2x3x1x4x1x4x3]=[00000]

引入矩阵的实际意义:将x=[x1x2x3x4]设为各节点电势(Potential at the Nodes)。

则式子中的诸如x2x1的元素,可以看做该边上的电势差(Potential Differences)。

容易看出其中一个解x=[1111],即等电势情况,此时电势差为0

化简A易得rank(A)=3,所以其零空间维数应为nr=43=1,即[1111]就是其零空间的一组基。

其零空间的物理意义为,当电位相等时,不存在电势差,图中无电流。

当我们把图中节点4接地后,节点4上的电势为0,此时的
A=[110011101100001],各列线性无关,rank(A)=3

现在看看ATy=0(这是应用数学里最常用的式子):

ATy=0=[10110110000110100011][y1y2y3y4y5]=[0000],对于转置矩阵有dimN(AT)=mr=53=2

接着说上文提到的的电势差,矩阵C将电势差与电流联系起来,电流与电势差的关系服从欧姆定律:边上的电流值是电势差的倍数,这个倍数就是边的电导(conductance)即电阻(resistance)的倒数。

Cy1,y2,y3,y4,y5,而ATy=0的另一个名字叫做“基尔霍夫电流定律”(Kirchoff's Law, 简称KCL)。

再把图拿下来观察:

import networkx as nx
import matplotlib.pyplot as plt
%matplotlib inline

dg = nx.DiGraph()
dg.add_edges_from([(1,2), (2,3), (1,3), (1,4), (3,4)])
edge_labels = {(1, 2): 1, (1, 3): 3, (1, 4): 4, (2, 3): 2, (3, 4): 5}

pos = nx.spring_layout(dg)
nx.draw_networkx_edge_labels(dg,pos,edge_labels=edge_labels, font_size=16)
nx.draw_networkx_labels(dg, pos, font_size=20, font_color='w')
nx.draw(dg, pos, node_size=1500, node_color="gray")

png

ATy=0中的方程列出来:
{y1+y3+y4=0y1y2=0y2+y3y5=0y4y5=0

对比看ATy=0的第一个方程,y1y3y4=0,可以看出这个方程是关于节点1上的电流的,方程指出节点1上的电流和为零,基尔霍夫定律是一个平衡方程、守恒定律,它说明了流入等于流出,电荷不会在节点上累积。

对于AT,有上文得出其零空间的维数是2,则零空间的基应该有两个向量。

  • 现在假设y1=1,也就是令1安培的电流在边1上流动;
  • 由图看出y2也应该为1
  • 再令y3=1,也就是让1安培的电流流回节点1
  • y4=y5=0

得到一个符合KCL的向量[11100],代回方程组发现此向量即为一个解,这个解发生在节点1,2,3组成的回路中,该解即为零空间的一个基。

根据上一个基的经验,可以利用1,3,4组成的节点求另一个基:

  • y1=y2=0
  • y3=1
  • 由图得y5=1
  • y4=1

得到令一个符合KCL的向量[00111],代回方程可知此为另一个解。

N(AT)的一组基为[11100][00111]

看图,利用节点1,2,3,4组成的大回路(即边1,2,5,4):

  • y3=0
  • y1=1
  • 则由图得y2=1,y5=1,y4=1

得到符合KCL的向量[11011],易看出此向量为求得的两个基之和。

接下来观察A的行空间,即AT的列空间,方便起见我们直接计算
AT=[10110110000110100011]
的列空间。

易从基的第一个向量看出前三列AT的线性相关,则AT的主列为第1,2,4列,对应在图中就是边1,2,4,可以发现这三条边没有组成回路,则在这里可以说线性无关等价于没有回路。由4个节点与3条边组成的图没有回路,就表明AT的对应列向量线性无关,也就是节点数减一(rank=nodes1)条边线性无关。另外,没有回路的图也叫作树(Tree)。

再看左零空间的维数公式:dimN(AT)=mr,左零空间的维数就是相互无关的回路的数量,于是得到loops=edges(nodes1),整理得:

nodesedges+loops=1

此等式对任何图均有效,任何图都有此拓扑性质,这就是著名的欧拉公式(Euler's Formula)。+=1便于记忆。

总结:

  • 将电势记为e,则在引入电势的第一步中,有e=Ax
  • 电势差导致电流产生,y=Ce
  • 电流满足基尔霍夫定律方程,ATy=0

这些是在无电源情况下的方程。

电源可以通过:在边上加电池(电压源),或在节点上加外部电流 两种方式接入。

如果在边上加电池,会体现在e=Ax中;如果在节点上加电流,会体现在ATy=f中,f向量就是外部电流。

将以上三个等式连起来得到ATCAx=f。另外,最后一个方程是一个平衡方程,还需要注意的是,方程仅描述平衡状态,方程并不考虑时间。最后,ATA是一个对称矩阵。

第十三讲:复习一

  1. u,v,wR7空间内的非零向量:则u,v,w生成的向量空间可能是1,2,3维的。

  2. 有一个5×3矩阵U,该矩阵为阶梯矩阵(echelon form),有3个主元:则能够得到该矩阵的秩为3,即三列向量线性无关,不存在非零向量使得三列的线性组合为零向量,所以该矩阵的零空间应为[000]

  3. 接上一问,有一个10×3矩阵B=[U2U],则化为最简形式(阶梯矩阵)应为[U0]rank(B)=3

  4. 接上一问,有一个矩阵型为C=[UUU0],则化为最简形式应为[U00U]rank(C)=6。矩阵C10×6矩阵,dimN(CT)=mr=4

  5. Ax=[242],并且x=[200]+c[110]+d[001],则等号右侧b向量的列数应为A的行数,且解的列数应为A的列数,所以A是一个3×3矩阵。从解的结构可知自由元有两个,则rank(A)=1,dimN(A)=2。从解的第一个向量得出,矩阵A的第一列是[121];解的第二个向量在零空间中,说明第二列与第一列符号相反,所以矩阵第二列是[121];解的第三个向量在零空间中,说明第三列为零向量;综上,A=[110220110]

  6. 接上一问,如何使得Ax=b有解?即使b在矩阵A的列空间中。易知A的列空间型为c[121],所以使b为向量[121]的倍数即可。

  7. 有一方阵的零空间中只有零向量,则其左零空间也只有零向量。

  8. 5×5矩阵组成的矩阵空间,其中的可逆矩阵能否构成子空间?两个可逆矩阵相加的结果并不一定可逆,况且零矩阵本身并不包含在可逆矩阵中。其中的奇异矩阵(singular matrix,非可逆矩阵)也不能组成子空间,因为其相加的结果并不一定能够保持不可逆。

  9. 如果B2=0,并不能得出B=0,反例:[0100]这个矩阵经常会被用作反例

  10. n×n矩阵的列向量线性无关,则是否b,Ax=b有解?是的,因为方阵各列线性无关,所以方阵满秩,它是可逆矩阵,肯定有解。


  11. B=[110010101][101201110000],在不解出B的情况下,求B的零空间。可以观察得出前一个矩阵是可逆矩阵,设B=CD,则求零空间Bx=0,CDx=0,而C是可逆矩阵,则等式两侧同时乘以C1C1CDx=Dx=0,所以当C为可逆矩阵时,有N(CD)=N(D),即左乘逆矩阵不会改变零空间。本题转化为求D的零空间,N(B)的基为
    [FI],也就是[1110][2101]

  12. 接上题,求Bx=[101]的通解。观察B=CD,易得B矩阵的第一列为[101],恰好与等式右边一样,所以[1000]可以作为通解中的特解部分,再利用上一问中求得的零空间的基,得到通解
    x=[1000]+c1[1110]+c2[2101]

  13. 对于任意方阵,其行空间等于列空间?不成立,可以使用[0100]作为反例,其行空间是向量[01]的任意倍数,而列空间是向量[10]的任意倍数。但是如果该方阵是对称矩阵,则成立。

  14. AA的四个基本子空间相同。

  15. 如果A,B的四个基本子空间相同,则A,B互为倍数关系。不成立,如任意两个n阶可逆矩阵,他们的列空间、行空间均为Rn,他们的零空间、左零空间都只有零向量,所以他们的四个基本子空间相同,但是并不一定具有倍数关系。

  16. 如果交换矩阵的某两行,则其行空间与零空间保持不变,而列空间与左零空间均已改变。

  17. 为什么向量v=[123]不能同时出现在矩阵的行空间与零空间中?令A[123]=[000],很明显矩阵A中不能出现值为[123]的行向量,否则无法形成等式右侧的零向量。这里引入正交(perpendicular)的概念,矩阵的行空间与零空间正交,它们仅共享零向量。

第十四讲:正交向量与子空间

在四个基本子空间中,提到对于秩为r的m×n矩阵,其行空间(dimC(AT)=r)与零空间(dimN(A)=nr)同属于Rn空间,其列空间(dimC(A)=r)与左零空间(dimN(AT)=m-r)同属于Rm空间。

对于向量x,y,当xTy=0x1y1+x2yx++xnyn=0时,有向量x,y正交(vector orthogonal)。

毕达哥拉斯定理(Pythagorean theorem)中提到,直角三角形的三条边满足:

x2+y2=x+y2xTx+yTy=(x+y)T(x+y)xTx+yTy=xTx+yTy+xTy+yTx0=xTy+yTxxTy=yTx0=2xTyxTy=0

由此得出,两正交向量的点积为0。另外,x,y可以为0向量,由于0向量与任意向量的点积均为零,所以0向量与任意向量正交。

举个例子:
x=[123],y=[210],x+y=[313],有x2=14,y2=5,x+y2=19,而xTy=1×2+2×(1)+3×0=0

向量S与向量T正交,则意味着S中的每一个向量都与T中的每一个向量正交。若两个子空间正交,则它们一定不会相交于某个非零向量。

现在观察行空间与零空间,零空间是Ax=0的解,即x若在零空间,则Ax为零向量;

而对于行空间,有 [row1row2rowm][x]=[000],可以看出:

[row1][x]=0[row2][x]=0[rowm][x]=0

所以这个等式告诉我们,xA中的所有行正交;

接下来还验证x是否与A中各行的线性组合正交,
{c1(row1)Tx=0c2(row2)Tx=0cn(rowm)Tx=0,各式相加得(c1row1+c2row2++cnrowm)Tx=0,得证。

我们可以说,行空间与零空间将Rn分割为两个正交的子空间,同样的,列空间与左零空间将Rm分割为两个正交的子空间。

举例,A=[1252410],则可知m=2,n=3,rank(A)=1,dimN(A)=2

Ax=[1252410][x1x2x3]=[00],解得零空间的一组基x1=[210]x2=[501]

而行空间的一组基为r=[125],零空间与行空间正交,在本例中行空间也是零空间的法向量。

补充一点,我们把行空间与零空间称为n维空间里的正交补(orthogonal complement),即零空间包含了所有与行空间正交的向量;同理列空间与左零空间为m维空间里的正交补,即左零空间包含了所有与零空间正交的向量。

接下来看长方矩阵,m>n。对于这种矩阵,Ax=b中经常混入一些包含“坏数据”的方程,虽然可以通过筛选的方法去掉一些我们不希望看到的方程,但是这并不是一个稳妥的方法。

于是,我们引入一个重要的矩阵:ATA。这是一个n×m矩阵点乘m×n矩阵,其结果是一个n×n矩阵,应该注意的是,这也是一个对称矩阵,证明如下:

(ATA)T=AT(AT)T=ATA

这一章节的核心就是ATAx=ATb,这个变换可以将“坏方程组”变为“好方程组”。

举例,有[111215][x1x2]=[b1b2b3],只有当[b1b2b3]在矩阵的列空间时,方程才有解。

现在来看[111125][111215]=[38830],可以看出此例中ATA是可逆的。然而并非所有ATA都是可逆的,如[111333][131313]=[39927](注意到这是两个秩一矩阵相乘,其结果秩不会大于一)

先给出结论:

N(ATA)=N(A)rank(ATA)=rank(A)ATAN(A)A线

下一讲涉及投影,很重要。

第十五讲:子空间投影

R2空间讲起,有向量a,b,做ba上的投影p,如图:

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

plt.style.use("seaborn-dark-palette")

fig = plt.figure()
plt.axis('equal')
plt.axis([-7, 7, -6, 6])
plt.arrow(-4, -1, 8, 2, head_width=0.3, head_length=0.5, color='r', length_includes_head=True)
plt.arrow(0, 0, 2, 4, head_width=0.3, head_length=0.5, color='b', length_includes_head=True)
plt.arrow(0, 0, 48/17, 12/17, head_width=0.3, head_length=0.5, color='gray', length_includes_head=True)
plt.arrow(48/17, 12/17, 2-48/17, 4-12/17, head_width=0.3, head_length=0.5, color='g', length_includes_head=True)
# plt.plot([48/17], [12/17], 'o')
# y=1/4x
# y=-4x+12
# x=48/17
# y=12/17
plt.annotate('b', xy=(1, 2), xytext=(-30, 15), textcoords='offset points', size=20, arrowprops=dict(arrowstyle="->"))
plt.annotate('a', xy=(-1, -0.25), xytext=(15, -30), textcoords='offset points', size=20, arrowprops=dict(arrowstyle="->"))
plt.annotate('e=b-p', xy=(2.5, 2), xytext=(30, 0), textcoords='offset points', size=20, arrowprops=dict(arrowstyle="->"))
plt.annotate('p=xa', xy=(2, 0.5), xytext=(-20, -40), textcoords='offset points', size=20, arrowprops=dict(arrowstyle="->"))
plt.grid()

png

plt.close(fig)

从图中我们知道,向量e就像是向量b,p之间的误差,e=bp,eppa上,有p=ax_

所以有aTe=aT(bp)=aT(bax)=0。关于正交的最重要的方程:

aT(bxa)=0xaTa=aTb_x=aTbaTa_p=aaTbaTa

从上面的式子可以看出,如果将b变为2bp也会翻倍,如果将a变为2ap不变。

设投影矩阵为P,则可以说投影矩阵作用与某个向量后,得到其投影向量,projectionp=Pb

易看出P=aaTaTa_,若an维列向量,则P是一个n×n矩阵。

观察投影矩阵P的列空间,C(P)是一条通过a的直线,而rank(P)=1(一列乘以一行:aaT,而这一列向量a是该矩阵的基)。

投影矩阵的性质:

  • P=PT_,投影矩阵是一个对称矩阵。
  • 如果对一个向量做两次投影,即PPb,则其结果仍然与Pb相同,也就是P2=P_

为什么我们需要投影?因为就像上一讲中提到的,有些时候Ax=b无解,我们只能求出最接近的那个解。

Ax总是在A的列空间中,而b却不一定,这是问题所在,所以我们可以将b变为A的列空间中最接近的那个向量,即将无解的Ax=b变为求有解的Ax^=ppbA的列空间中的投影,x^不再是那个不存在的x,而是最接近的解)。

现在来看R3中的情形,将向量b投影在平面A上。同样的,p是向量b在平面A上的投影,e是垂直于平面A的向量,即b在平面A法方向的分量。
设平面A的一组基为a1,a2,则投影向量p=x1^a1+x2^a2,我们更倾向于写作p=Ax^,这里如果我们求出x^,则该解就是无解方程组最近似的解。

现在问题的关键在于找e=bAx^,使它垂直于平面,因此我们得到两个方程
{a1T(bAx^)=0a2T(bAx^)=0,将方程组写成矩阵形式
[a1Ta2T](bAx^)=[00],即AT(bAx^)=0

比较该方程与R2中的投影方程,发现只是向量a变为矩阵A而已,本质上就是ATe=0。所以,eAT的零空间中(eN(AT)),从前面几讲我们知道,左零空间列空间,则有eC(A),与我们设想的一致。

再化简方程得ATAx=ATb,比较在R2中的情形,aTa是一个数字而ATA是一个n阶方阵,而解出的x可以看做两个数字的比值。现在在R3中,我们需要再次考虑:什么是x^?投影是什么?投影矩阵又是什么?

  • 第一个问题:x^=(ATA)1ATb
  • 第二个问题:p=Ax^=A(ATA)1AT_b,回忆在R2中的情形,下划线部分就是原来的aaTaTa
  • 第三个问题:易看出投影矩阵就是下划线部分P=A(ATA)1AT

这里还需要注意一个问题,P=A(ATA)1AT是不能继续化简为P=AA1(AT)1AT=I的,因为这里的A并不是一个可逆方阵。
也可以换一种思路,如果A是一个n阶可逆方阵,则A的列空间是整个Rn空间,于是bRn上的投影矩阵确实变为了I,因为b已经在空间中了,其投影不再改变。

再来看投影矩阵P的性质:

  • P=PT:有
    [A(ATA)1AT]T=A[(ATA)1]TAT,而(ATA)是对称的,所以其逆也是对称的,所以有A((ATA)1)TAT=A(ATA)1AT,得证。
  • P2=P:有
    [A(ATA)1AT][A(ATA)1AT]=A(ATA)1[(ATA)(ATA)1]AT=A(ATA)1AT,得证。

最小二乘法

接下看看投影的经典应用案例:最小二乘法拟合直线(least squares fitting by a line)。

我们需要找到距离图中三个点 (1,1),(2,2),(3,2) 偏差最小的直线:b=C+Dt

plt.style.use("seaborn-dark-palette")

fig = plt.figure()
plt.axis('equal')
plt.axis([-1, 4, -1, 3])
plt.axhline(y=0, c='black', lw='2')
plt.axvline(x=0, c='black', lw='2')

plt.plot(1, 1, 'o', c='r')
plt.plot(2, 2, 'o', c='r')
plt.plot(3, 2, 'o', c='r')

plt.annotate('(1, 1)', xy=(1, 1), xytext=(-40, 20), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.annotate('(2, 2)', xy=(2, 2), xytext=(-60, -5), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.annotate('(3, 2)', xy=(3, 2), xytext=(-18, 20), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))

plt.grid()

png

plt.close(fig)

根据条件可以得到方程组
{C+D=1C+2D=2C+3D=2,写作矩阵形式
[111213][CD]=[122],也就是我们的Ax=b,很明显方程组无解。但是ATAx^=ATb有解,于是我们将原是两边同时乘以AT后得到的新方程组是有解的,ATAx^=ATb也是最小二乘法的核心方程。

下一讲将进行最小二乘法的验算。

第十六讲:投影矩阵和最小二乘

上一讲中,我们知道了投影矩阵P=A(ATA)1ATPb将会把向量投影在A的列空间中。

举两个极端的例子:

  • 如果bC(A),则Pb=b
  • 如果bC(A),则Pb=0

一般情况下,b将会有一个垂直于A的分量,有一个在A列空间中的分量,投影的作用就是去掉垂直分量而保留列空间中的分量。

在第一个极端情况中,如果bC(A)则有b=Ax。带入投影矩阵p=Pb=A(ATA)1ATAx=Ax,得证。

在第二个极端情况中,如果bC(A)则有bN(AT),即ATb=0。则p=Pb=A(ATA)1ATb=0,得证。

向量b投影后,有b=e+p,p=Pb,e=(IP)b,这里的pbC(A)中的分量,而ebN(AT)中的分量。

回到上一讲最后提到的例题:

我们需要找到距离图中三个点 (1,1),(2,2),(3,2) 偏差最小的直线:y=C+Dt

%matplotlib inline
import matplotlib.pyplot as plt
from sklearn import linear_model
import numpy as np
import pandas as pd
import seaborn as sns

x = np.array([1, 2, 3]).reshape((-1,1))
y = np.array([1, 2, 2]).reshape((-1,1))
predict_line = np.array([-1, 4]).reshape((-1,1))

regr = linear_model.LinearRegression()
regr.fit(x, y)
ey = regr.predict(x)

fig = plt.figure()
plt.axis('equal')
plt.axhline(y=0, c='black')
plt.axvline(x=0, c='black')

plt.scatter(x, y, c='r')
plt.scatter(x, regr.predict(x), s=20, c='b')
plt.plot(predict_line, regr.predict(predict_line), c='g', lw='1')
[ plt.plot([x[i], x[i]], [y[i], ey[i]], 'r', lw='1') for i in range(len(x))]

plt.annotate('(1, 1)', xy=(1, 1), xytext=(-15, -30), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.annotate('(2, 2)', xy=(2, 2), xytext=(-60, -5), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.annotate('(3, 2)', xy=(3, 2), xytext=(-15, -30), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))

plt.annotate('$e_1$', color='r', xy=(1, 1), xytext=(0, 2), textcoords='offset points', size=20)
plt.annotate('$e_2$', color='r', xy=(2, 2), xytext=(0, -15), textcoords='offset points', size=20)
plt.annotate('$e_3$', color='r', xy=(3, 2), xytext=(0, 1), textcoords='offset points', size=20)

plt.annotate('$p_1$', xy=(1, 7/6), color='b', xytext=(-7, 30), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.annotate('$p_2$', xy=(2, 5/3), color='b', xytext=(-7, -30), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.annotate('$p_3$', xy=(3, 13/6), color='b', xytext=(-7, 30), textcoords='offset points', size=14, arrowprops=dict(arrowstyle="->"))
plt.draw()

png

plt.close(fig)

根据条件可以得到方程组
{C+D=1C+2D=2C+3D=2,写作矩阵形式
[111213][CD]=[122],也就是我们的Ax=b,很明显方程组无解。

我们需要在b的三个分量上都增加某个误差e,使得三点能够共线,同时使得e12+e22+e32最小,找到拥有最小平方和的解(即最小二乘),即Axb2=e2最小。此时向量b变为向量p=[p1p2p3](在方程组有解的情况下,Axb=0,即bA的列空间中,误差e为零。)我们现在做的运算也称作线性回归(linear regression),使用误差的平方和作为测量总误差的标准。

注:如果有另一个点,如(0,100),在本例中该点明显距离别的点很远,最小二乘将很容易被离群的点影响,通常使用最小二乘时会去掉明显离群的点。

现在我们尝试解出x^=[C^D^]p=[p1p2p3]

ATAx^=ATbATA=[36614]ATb=[511][36614][C^D^]=[511]

写作方程形式为{3C^+16D^=56C^+14D^=11,也称作正规方程组(normal equations)。

回顾前面提到的“使得误差最小”的条件,e12+e22+e32=(C+D1)2+(C+2D2)2+(C+3D2)2,使该式取最小值,如果使用微积分方法,则需要对该式的两个变量C,D分别求偏导数,再令求得的偏导式为零即可,正是我们刚才求得的正规方程组。(正规方程组中的第一个方程是对C求偏导的结果,第二个方程式对D求偏导的结果,无论使用哪一种方法都会得到这个方程组。)

解方程得C^=23,D^=12,则“最佳直线”为y=23+12t,带回原方程组解得p1=76,p2=53,p3=136,即e1=16,e2=13,e3=16

于是我们得到p=[7653136],e=[161316],易看出b=p+e,同时我们发现pe=0pe

误差向量e不仅垂直于投影向量p,它同时垂直于列空间,如 [111],[123]

接下来我们观察ATA,如果A的各列线性无关,求证ATA是可逆矩阵。

先假设ATAx=0,两边同时乘以xTxTATAx=0,即(Ax)T(Ax)=0。一个矩阵乘其转置结果为零,则这个矩阵也必须为零((Ax)T(Ax)相当于Ax长度的平方)。则Ax=0,结合题设中的“A的各列线性无关”,可知x=0,也就是ATA的零空间中有且只有零向量,得证。

我们再来看一种线性无关的特殊情况:互相垂直的单位向量一定是线性无关的。

  • 比如[100][010][001],这三个正交单位向量也称作标准正交向量组(orthonormal vectors)。
  • 另一个例子[cosθsinθ][sinθcosθ]

下一讲研究标准正交向量组。

第十七讲:正交矩阵和Gram-Schmidt正交化法

标准正交矩阵

定义标准正交向量(orthonormal):qiTqj={0ij1i=j

我们将标准正交向量放入矩阵中,有Q=[q1q2qn]

上一讲我们研究了AA的特性,现在来观察QTQ=[q1Tq2TqnT][q1q2qn]

根据标准正交向量的定义,计算QTQ=[100010001]=I,我们也把Q成为标准正交矩阵(orthonormal matrix)。

特别的,当Q恰好是方阵时,由于正交性,易得Q是可逆的,又QTQ=I,所以QT=Q1

  • 举个置换矩阵的例子:Q=[010100001],则QT=[010001100],易得QTQ=I
  • 使用上一讲的例子Q=[cosθsinθsinθcosθ],列向量长度为1,且列向量相互正交。
  • 其他例子Q=12[1111],列向量长度为1,且列向量相互正交。
  • 使用上一个例子的矩阵,令Q=c[QQQQ],取合适的c另列向量长度为1也可以构造标准正交矩阵:Q=12[1111111111111111],这种构造方法以阿德玛(Adhemar)命名,对2,4,16,64,阶矩阵有效。
  • 再来看一个例子,Q=13[122212221],列向量长度为1,且列向量相互正交。格拉姆-施密特正交化法的缺点在于,由于要求得单位向量,所以我们总是除以向量的长度,这导致标准正交矩阵中总是带有根号,而上面几个例子很少有根号。

再来看标准正交化有什么好处,假设要做投影,将向量b投影在标准正交矩阵Q的列空间中,根据上一讲的公式得P=Q(QTQ)1QT,易得P=QQT。我们断言,当列向量为标准正交基时,QQT是投影矩阵。极端情况,假设矩阵是方阵,而其列向量是标准正交的,则其列空间就是整个向量空间,而投影整个空间的投影矩阵就是单位矩阵,此时QQT=I。可以验证一下投影矩阵的两个性质:(QQT)T=(QT)TQT=QQT,得证;(QQT)2=QQTQQT=Q(QTQ)QT=QQT,得证。

我们计算的ATAx^=ATb,现在变为QTQx^=QTb,也就是x^=QTb,分解开来看就是 x^i=qiTb_,这个式子在很多数学领域都有重要作用。当我们知道标准正交基,则解向量第i个分量为基的第i个分量乘以b,在第i个基方向上的投影就等于qiTb

Gram-Schmidt正交化法

我们有两个线性无关的向量a,b,先把它们化为正交向量A,B,再将它们单位化,变为单位正交向量q1=AA,q2=BB

  • 我们取定a向量的方向,a=A
  • 接下来将b投影在A的法方向上得到B,也就是求子空间投影一讲中,我们提到的误差向量e=bp,即B=bATbATAA。检验一下ABATB=ATbATATbATAA=ATbATAATAATb=0。(ATbATAA就是Ax^=p。)

如果我们有三个线性无关的向量a,b,c,则我们现需要求它们的正交向量A,B,C,再将它们单位化,变为单位正交向量q1=AA,q2=BB,q3=CC

  • 前两个向量我们已经得到了,我们现在需要求第三个向量同时正交于A,B
  • 我们依然沿用上面的方法,从c中减去其在A,B上的分量,得到正交与A,BCC=cATcATAABTcBTBB

现在我们试验一下推导出来的公式,a=[111],b=[102]

  • A=a=[111]
  • 根据公式有B=ahAh是比值ATbATA=33,则B=[111]33[102]=[011]。验证一下正交性有AB=0
  • 单位化,q1=13[111],q2=12[102],则标准正交矩阵为Q=[13013121312],对比原来的矩阵D=[111012],有D,Q的列空间是相同的,我们只是将原来的基标准正交化了。

我们曾经用矩阵的眼光审视消元法,有A=LU。同样的,我们也用矩阵表达标准正交化,A=QR。设矩阵A有两个列向量[a1a2],则标准正交化后有[a1a2]=[q1q2][a1Tq1a2Tq1a1Tq2a2Tq2],而左下角的a1Tq2始终为0,因为Gram-Schmidt正交化总是使得a1q2,后来构造的向量总是正交于先前的向量。所以这个R矩阵是一个上三角矩阵。

第十八讲:行列式及其性质

本讲我们讨论出行列式(determinant)的性质:

  1. detI=1,单位矩阵行列式值为一。

  2. 交换行行列式变号。

    在给出第三个性质之前,先由前两个性质可知,对置换矩阵有detP={1even1odd

    举例:|1001|=1,|0110|=1,于是我们猜想,对于二阶方阵,行列式的计算公式为|abcd|=adbc

  3. a. |tatbtctd|=t|abcd|

    b. |a+ab+bcd|=|abcd|+|abcd|

    注意这里并不是指det(A+B)=detA+detB,方阵相加会使每一行相加,这里仅是针对某一行的线性变换。

  4. 如果两行相等,则行列式为零。使用性质2交换两行易证。

  5. 从第k行中减去第i行的l倍,行列式不变。这条性质是针对消元的,我们可以先消元,将方阵变为上三角形式后再计算行列式。

    举例:|abcladlb|=3.b|abcd|+|ablalb|=3.a|abcd|l|abab|=4|abcd|

  6. 如果方阵的某一行为零,则其行列式值为零。使用性质3.a对为零行乘以不为零系数l,使ldetA=detA即可证明;或使用性质5将某行加到为零行,使存在两行相等后使用性质4即可证明。

  7. 有上三角行列式U=|d10d200dn|,则detU=d1d2dn。使用性质5,从最后一行开始,将对角元素上方的元素依次变为零,可以得到型为D=|d1000d2000dn|的对角行列式,再使用性质3将对角元素提出得到dndn1d1|100010001|,得证。

  8. 当矩阵A为奇异矩阵时,detA=0;当且仅当A可逆时,有detA0。如果矩阵可逆,则化简为上三角形式后各行都含有主元,行列式即为主元乘积;如果矩阵奇异,则化简为上三角形式时会出现全零行,行列式为零。

    再回顾二阶情况:|abcd||ab0dcab|=adbc,前面的猜想得到证实。

  9. detAB=(detA)(detB)。使用这一性质,detI=detA1A=detA1detA,所以detA1=1detA

    同时还可以得到:detA2=(detA)2,以及det2A=2ndetA,这个式子就像是求体积,对三维物体有每边翻倍则体积变为原来的八倍。

  10. detAT=detA,前面一直在关注行的属性给行列式带来的变化,有了这条性质,行的属性同样适用于列,比如对性质2就有“交换列行列式变号”。

    证明:|AT|=|A||UTLT|=|LU||UT||LT|=|L||U|,值得注意的是,L,U的行列式并不因为转置而改变,得证。

posted @   Yihoyo  阅读(232)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示