在线性代数中,我愿把线性方程组称作是基础中的基础: 将线性方程组中各个未知数的系数组合在一起便构成了矩阵,同时每一个矩阵也对应一个线性变换. 所以我认为线性代数也可以看作是一门解方程的课.在我看来任何复杂的题目在它晦涩抽象的定义背后,都有一个线性方程组在等待我们去探索. 只要找到这个方程组并将其求解, 我们便会得到最终的结果. 诚然,众里寻它(方程组)谈何容易,往往需要我们斩荆棘,破巨浪,通过对更多概念的深入学习和了解来一步步靠近真相. 最后蓦然回首,就会发现我们想要的方程就在灯火阑珊处.
我们知道,二元一次方程组的解的几何意义是平面直角坐标系内两个方程对应的直线的交点.我们有很多种方法去求出这个方程组的解,但是当未知数的个数逐渐增多的时候,方程组开始变得复杂且冗长,使用传统的消元方法已经无法快速地计算出答案了.因此,在线性代数二三事里面的第一节内容中,我会介绍一种独特的消元方法,使得在求解多元一次方程组时可以快速,准确地求出答案.我们不妨考虑这样的n元一次方程组:
⎩⎨⎧a11x1+a12x2+⋯+a1nxn=b1a21x1+a22x2+⋯+a2nxn=b2⋮am1x1+am2x2+⋯+amnxn=bm.
在这个方程组中aij:1≤i≤m;1≤j≤n;bk:1≤k≤m均为常数,x1,x2,⋯,xn为未知数.如果想要求解这个方程,使用我们所熟知的代入消元法会变得十分繁琐,我们不妨考虑把每个未知数前面所对应的系数进行整齐排列,然后写到一个数表中,如下图所示:
a11a21⋮am1a12a22⋮am2⋯⋯⋱⋯⋯⋯⋱⋯a1na2n⋮amn.
在这个数表中,其第i列正好就是原方程组中xi的系数,从第一个方程开始从上至下整齐排列.这样的一个数表我们称作是矩阵(Matrix), 通常用A表示,其中A共有m 行n列,我们则称A为 m (行数) × n (列数)矩阵,位于该矩阵第i行第j列的元素我们写作(A)ij (注意字母的顺序,这点非常重要!). 我们同样可以将剩下的未知数x1,x2,⋯,xn写进一个有n行和1列的数表中, 从上至下分别是未知数x1,x2,⋯. 我们把形如这样的n行1列数表称作n×1矩阵, 或向量. 通常我们用字母x来表示由未知数组成的向量,即
x=x1x2⋮xn.
最后,我们运用同样的方法,把b1,b2,⋯,bm按照相同的顺序写成一个m×1向量,一般用字母b来表示,即
b=b1b2⋮bm
. 然后,我们考虑形如 Ax=b的结构.
定义 1.1
设存在m×n矩阵A和k×1向量x. 那么当且仅当k=n时,运算Ax有意义. 其运算结果为m×1向量. 我们不妨设
A=a11a21am1a12a22am2⋯⋯⋮⋯⋯⋯⋮⋯a1na2namn,x=x1x2⋮xn,b=b1b2⋮bm,且Ax=b, 那么
Ax=a11a21am1a12a22am2⋯⋯⋮⋯⋯⋯⋮⋯a1na2namn⋅x1x2⋮xn=x1⋅a11a21⋮am1+x2⋅a12a22⋮am2+⋯+xn⋅a1na2n⋮amn=a11x1+a12x2+⋯+a1nxna21x1+a22x2+⋯+a2nxn⋮am1x1+am2x2+⋯+amnxn=b1b2⋮bm.同时,我们设x,y为向量, c为常数,则矩阵与向量的乘法还满足以下性质:
A(x+y)=Ax+Ay,A(cx)=cAx.
因此不难发现,矩阵与向量的乘法运算Ax即为把矩阵第i列整体当成一个向量vi,然后用该向量去乘以x中第i个位置的元素,最后加和. 这也是为什么我们要强调矩阵中的列数要等于向量中的行数,否则会有
无法被分配的项或元素,从而无法求解.最后得到的结果b则与矩阵中的行数有关(通过观察上述推理过程,与我们最开始引入的方程组做一下对比,我们是否发现二者经过运算之后完全等价?). 回到刚才所提到的Ax=b的模型当中,我们可以把这个系统进一步地简化,省略x向量,写成A∣b的形式, 即:
a11a21am1a12a22am2⋯⋯⋮⋯⋯⋯⋮⋯a1na2namnb1b2⋮bm.
这样一来,我们便得到了一个m×(n+1)的矩阵,我们用一条竖线来区分原方程Ax=b中等式的左边和右边.我们把形如这样的矩阵(A∣b)称作是A的增广矩阵 (Augmented Matrix).到了这一步, 我们所做的全部准备工作就已经完成了,接下来我们所关心的便是如何去进行消元,从而求出原方程的解.我们在这里引入这本书里面的第一个定理: Gauss 消元定理 (Gauss Elimination Theorem):
定理 1.1
将线性方程组写成形如A∣b的矩阵后, 我们可以进行下列三种变换, 使得最后方程组的解不受影响:
① 交换任意两行;
② 将一行中的所有元素全部乘以同一非零常数k;
③ 将一行中的所有元素的k倍加到另外一行相对应的元素上, 其中k为任意常数.
我们通过下面例子来看一下高斯消元法是如何运作的:
①
(adbecf)交换第一,二行(daebfc);
②
(adbecf)第一行乘以常数k(kadkbekcf);
③
(adbecf)第一行对应位置的数加到第二行上(ad+abe+bcf+c).
定理1 的第二,三条运算尤为重要. 我们这样做的目的是尽可能地通过行与行之间的各种运算,从而产生更多的0, 也就是我们所谓的消元.设想经过了一些变换, 方程Ax=b被化简成为了这样的形式:
(100156),(1.1)
那么这样一来,我们便可以通过观察矩阵从而直接得出原方程组的解:x1=5,x2=6.因为矩阵的第一行其实就是方程1x1+0x2=5; 矩阵的第二行其实就是方程
0x1+1x2=6. 形如(1.1)的矩阵也是我们在进行化简消元时所想要的结果.当然, 我们需要按照一定的顺序和规则进行消元, 否则可能无法得到想要的结果.
消元的目标主要是把A的部分化为更简单的阶梯形或最简行阶梯形;但每一次行变换都必须同时作用在增广矩阵的整行上,包括右端的 b列. 右端列不是“解”, 而是常数项.最终解需要从化简后的增广矩阵中读出. 消元应该从矩阵A的第1列开始消元, 然后按顺序依次往右. 在对第i列进行消元时,我们的原则是将该列中从上往下除去第i个元素外的其它元素化简成0, 然后再进行下一列的消元. 那么当我们进行消元的时, 我们怎么才能知道矩阵A已经化成最简形式了呢? 经过一系列初等行变换后,如果矩阵满足以下三个条件,我们称其为最简行阶梯形矩阵 (Reduced Row Echelon Form).
定义 1.2
若A满足:
① 元素全部为零的行在矩阵的最下方;
② 若A的第i行中的元素不全为零, 则这一行的第一个非零元素为1, 并且元素1所在的这一列的其它元素全部为0;
③ 若A的第i行中的元素不全为零, 那么第一个非零元素1所在的列的下标应随行的下标的增大而严格增大.
我们则称m×n矩阵A为最简行阶梯矩阵.
为方便理解,我们直接通过几个例子来对行最简形矩阵有着更加深入的理解.
例题 1.1
给出矩阵A=000100010020 试问A是否为最简行阶梯矩阵?
解答 1.1
通过观察矩阵A, 我们需要将定义1.2中的三条性质全部带入矩阵中进行验证. 由于元素全部为0的行(第三行)在矩阵的最下面,因此满足性质一; 在第一,二行中, 从左往右第一个非零元素为1, 并且所在列的其它元素全部为0, 因此性质二成立; 第一行中第一个非零元素位于第2列; 第二行中第一个非零元素位于第3列, 因此现每一行中第一个非零元素所在的列标号随着行标号的增大而增大,因此满足性质三. 故我们称A为最简行阶梯矩阵.
下面的几个例子同样最简行阶梯矩阵(其中*代表该位置的元素可以为任何数):
(10∗001)100010∗∗0001100010001.
下面的几个例子不是最简行阶梯矩阵:
(102021)000010011030100110111.(1.2)
读者在这里应当自行验证上述这些矩阵为什么满足(不满足)最简行阶梯矩阵.
定义 1.3
任何一个矩阵A都可以通过定义1.2中的法则进行一定次数的运算化简, 从而得到最简行阶梯矩阵. 我们将矩阵A的最简行阶梯矩阵写作RREF(A).
接下来, 我来完成一次完整的矩阵消元示范:
例题 1.2
已知矩阵A=1122−1122−1, 求RREF(A).
解答 1.2
根据消元法则,我们应当从第一列开始消元.在第一列中, 我们需要将位于第2,3行位置的元素消去. 因此我们可以先用第二行减去第一行,这样以来第二行第一个元素就会变成1−1=0,从而实现消元; 同时我们也可用第三行减去第一行的2倍实现第三行第一个元素的消元. 这个步骤我们写作(我们为书写方便, 一般用Rn来指第n行,Cm来指第m列):
1122−1122−1R2−R1;R3−2R111−12−(1×2)2−1−21−(2×2)22−2−1−(2×2)=1002−2−320−5.经过这一步的运算,第一列已消元完毕.此时,矩阵A是否为最简行阶梯矩阵?如果是,我们停止消元;如果不是,我们就继续进行第二列的消元,然后依次类推,直到所有列都消元完毕,或者我们提前得出最简行阶梯矩阵为止. 在这里该矩阵还不为最简行阶梯矩阵(读者应自行判断,并给出依据),所以我们进行第二列的消元: 在第二列中我们要消去位于第1,3行位置的元素,所以我们可以用第一行加上第二行; 同时用2倍的第三行减去3倍的第二行来实现对第二列的消元:
1002−2−320−5R1+R2;2R3+3R21+002×0+(3×0)2+(−2)−22×(−3)−3×(−2)2+002×(−5)+3×0=1000−2020−10.此时,再进行第三列的消元(A仍不为最简行阶梯矩阵): 用第三行加上五倍的第一行:
1000−2020−105R1+R35000−2000−10.此时,矩阵A已经很像最简行阶梯矩阵了,但是有一条性质还没有满足: 每一行中第一个非零元素不为1, 所以我们再次进行化简, 即第一行元素同除以5, 第二行同除以−2, 第三行同除以−10. 最终其最简行阶梯矩阵即为
100010001.
在此,读者可以自行尝试去求解矩阵的最简行阶梯矩阵.一个很好的素材便是(1.2)中的矩阵. 在最简行阶梯矩阵中,我们先笼统地引入一个非常重要的概念:
定义 1.4
定义矩阵A的秩 (rank) 为其最简行阶梯形矩阵中非零行的个数,等价地,也等于主元的个数.
定理 1.2
对任意矩阵A而言, rank(A)=rank(RREF(A)).
该定理的证明会在后面的章节涉及,我们当下需要知道的仅仅是该定理的结论.这个定理告诉我们使用高斯消元时得到的最简行阶梯矩阵的秩与原矩阵的秩相同.
定义 1.5
如果矩阵A的秩与A中列的数目相同,我们称矩阵A是列满秩的.
满秩的概念我同样会到后续的章节中提到,现阶段我们对满秩的定义不用做过多的理解,只知道如何求解一个矩阵的秩,以及如何判断该矩阵是否为满秩即可.
例题 1.3
假设矩阵A=123⋮20221+22+23+2⋮2022+21+2+32+2+33+2+3⋮2022+2+3⋯⋯⋯⋮⋯⋯⋯⋯⋮⋯1+2+3+⋯+20242+2+3+⋯+20243+2+3+⋯+2024⋮2022+2+3+⋯+2024, 试问A是否列满秩?
解答 1.3
在本例题中由于矩阵过于复杂,按照高斯消元法计算会变得非常繁琐,所以我们直接从定义出发.我们看到矩阵A 由2022行, 2024列组成,根据定义,该矩阵的秩等于其行最简形矩阵中所有非零行的数目,因此无论如何矩阵A的秩无法超过2022. 再看满秩的概念,满秩意味着该矩阵的秩等于其矩阵的列数,然而该矩阵有2024列,大于其最大能达到的秩.所以无论如何矩阵A也无法列满秩.
例题 1.4
求解由未知数x,y,z构成的方程组
⎩⎨⎧x+y−2z=−32x+y+2z=0−x−y+4z=4
解答 1.4
运用前面所学的知识,我们应该很容易能找出在这个方程组中与A,x,b相对应的元素,即:
A=12−111−1−224,x=xyz,b=−304.随后,我们便知道A的增广矩阵即
12−111−1−224−304.随后,我们在竖线左边部分进行消元,使用Gauss消元法则,先从第一列开始消元:
12−111−1−224−304R2−2R1;R3+R11001−10−262−361;注意到此时该矩阵还不为最简行阶梯矩阵,所以继续对第二列进行消元:
1001−10−262−361R1+R21000−10462361;注意到此时该矩阵还不为最简行阶梯矩阵,所以继续对第三列进行消元:
1000−10462361R1−2R3;R2−3R31000−10002131.此时所有的三列全部消元完毕(再次强调消元的时候我们只考虑对矩阵A中的列进行消元)然后我们进行如下的最后一步化简:
1000−10002131(−1)R2;(0.5)R31000100011−30.5.至此,我们已得到RREF(A), 所以我们可以直接写出原方程组的解:x=1;y=−3;z=0.5.
所以不难看出,对矩阵本身进行高斯消元和对A∣b进行消元所用到的方法完全一样,只是需要注意当我们在进行消元运算时应当把b中对应的元素也考虑在内,但消元仅限于A.
随后,我们来看一下线性方程组所产生的解的情况.我们知道一个二元一次方程组的解即为在平面内两条直线的交点,因此研究二元一次方程组里解的个数也就等同于研究两条直线的位置关系.如果两条直线平行且不重合,意味着二者没有交点,因此原方程组无解;如果两条直线完全重合,那么该直线上的每一个点都是满足条件的解,此时原方程组有无穷多组解;如果两条直线相交,那么二者在平面直角坐标系内的唯一交点即为方程组的解,此时原方程组有且仅有一个解. 因此我们发现,对于二元一次方程组而言,其解有且仅有三种情况:无解;有无穷多组解; 有且仅有一个解. 其实对于未知数更多的方程组而言,该情况同样适用.
定理 1.3
对于任意一个线性方程组Ax=b而言,其解的个数有且仅有三种情况: 无解,无穷多组解,有且仅有一个解.
我们不难发现,在未知数给定的情况下,方程越少,解的“随意性”就越高,方程越多,限制条件越苛刻,解的“自由度”就越少,如果方程数过多,还可能会产生无解的情况.我们之所以要进行高斯消元,就是为了把原本复杂的方程结构得以简化,使得我们一眼就能看出原方程中哪些方程是“多余的”,从而大大简化我们的计算量. 假设我们有这样的一个三元一次方程组:
⎩⎨⎧x+2y+z=12x−y+2z=3x−8y+z=3, 我们可能会认为这个方程组有唯一解,因为有三个方程.但其实这个方程有无穷多组解: 经过对这个方程组的第一列进行Gauss消元之后,这个方程组可以写成形如下式的结构:
1002−5−10100112.
我们于是发现第二,三行完全等价,因此原方程组中看似有三个方程,实际上对解集起作用的只有两个方程. 在这种情况下,正如之前所讨论的情况,这个方程组会有无穷多组解(前提是两个平面相交).我们继续进行消元,得到最简行阶梯矩阵如下:
1000101007/5−0.20.
此时我们发现增广矩阵的第三行全部为零, 也就是说在原方程组中, 实际起作用的方程只有两个. 此时我们可以从第二行里面读出y=−0.2, 但是在第一行中我们只有x+z=7/5这一关系. 将二者结合, 它代表了一条在xoz平面内的直线, 直线上的任何点均为满足条件的解. 此时原方程有无穷多组解, 我们要做的便是将解集用含参数的式子表示出来.
在增广矩阵的RREF中,与主元列对应的未知数称为前导变量 (Leading Variables), 与非主元列对应的未知数称为自由变量 (Free Variables), 且每一个非主元列对应一个自由变量. 自由变量的个数等于未知数个数减去矩阵的秩,即n−rank(A). 如果我们发现原方程组中有n个未知数, m个方程, (m<n). 那么为了方便运算,我们一般在矩阵中用0元素将行数与列数补齐. 在本题中因为第三列元素不为主元, 我们便将第三列对应的未知数(z)选为参数, 然后把其他列中的未知数用含这些参数的式子表示出来. 此时我们就有:
{x+z=7/5y=−0.2,
也就是形如
⎩⎨⎧x=−z+7/5y=−0.2z=z
的形式.为了便于观察,我们一般把含有参数的项和常数分开,并且写成向量的形式.同时为了防止参数z和原方程中的未知数发生混淆,我们往往用其他的字母(如s,t,r,q等)来表示参数. 因此原方程组的解集如下:
xyz=7/5−0.20+s−101,其中s为参数, s∈R.
这样一来,原方程组的解集就清晰可见了: 它代表一条经过点(7/5,−1/5,0)的直线,并且该直线的方向向量为(−1,0,1). 原方程组的解集即构成这条直线上所有的点.
例题 1.5
求出线性方程组
{x+2y+z−w=0−x+y−2z+2w=0
的解集.
解答 1.5
我们直接写出相应的矩阵形式, 同时将第三,四行用元素0 补齐,即
1−10021001−200−12000000, 经过消元,我们得到其最简行阶梯矩阵为
1000010035−3100−3531000000. 此时我们将z,w (自由变量)作为参数, 分别设z=s,w=t, 那么我们有
⎩⎨⎧x=−35s+35ty=31s−31tz=sw=t. 因此原方程组的解集为
xyzw=s−353110+t35−3101.
那么, 无解的情况在矩阵里面是怎么表现出来的?
例题 1.6
求出线性方程组
⎩⎨⎧x+2y+z−w=42x−y+2w=34x+3y+2z=5
的解集.
解答 1.6
我们直接写出相应的矩阵形式, 同时将第四行用元素0 补齐,即
12402−1301020−12004350.
我们对第一列进行消元,得到
10002−5−501−2−20−14404−5−90. 此时我们注意到第二行和第三行中有形如−5y−2z+4w=−5和−5y−2z+4w=−9的两个平面的方程, 这两个平面相互平行,因此没有交点,由此也就得出原方程组无解.
至此,我们已经学会了线性方程组的求解方法. 这一节是线性代数中的重中之重,所以读者应做大量的练习,让自己尽快熟能生巧.
{1.1 练习}
1.设a∈R, 存在如下的线性方程组:
⎩⎨⎧x+y+3z=aax+y+5z=4x+ay+4z=a
分别找出所有满足条件的a的取值,使得原方程组: ① 有唯一解; ② 有无穷多组解; ③ 无解.
2.运用求解线性方程组的知识以及化学反应前后原子数目守恒的原则, 配平下列氧化还原反应方程式:
NH3 + CuO ⟶ N2 + Cu + H2O;
Pb(N3)2 + Cr(MnO4)2 ⟶ Cr2O3 + MnO2 + Pb3O4 + H2O.
3. 设矩阵
A=11211−a2−a226−aa204, 其中a∈R. 讨论A的秩的所有可能取值.
4. 在如下图所示的闭合电路中,电源E1,E2,E3的电动势均为1V 且内阻不计, 电阻
R1=R2=R3=R4=1Ω, 不考虑导线上的分压和热损失,据此判断流经E1,E2,E3的电流大小和方向.
5. 在如下图所示的网格中有A,B,C,D四个节点通过单向流连结,由外界流入A节点的流量和由B,C,D节点流出至外界的流量已知(流量在已在箭头上标出).已知在此系统内部流入一节点的流量等于流出该节点的流量,在本题中,流量τ≥0.
(i) 据此求出流量f1,f2,f3,f4,f5的所有可能取值;
(ii) 现规定f2上的流量不得超过3,在此情况下可以流经f3,f4的最大流量之和是多少?