一、A = LU
线性代数很多关键的概念实际上就是矩阵的分解(factorization)—— 原始矩阵 AAA 变成两个或三个特殊矩阵的乘积。这节是第一个分解,实际上也是最重要的分解。A=LUA=LUA=LU 的分解来自于消元法,其中因子 LLL 和 UUU 都是三角形矩阵
矩阵 UUU 是上三角矩阵,它的主元都在对角线上,消元步骤将 AAA 变为 UUU。现在我们要反向这些步骤(将 UUU 变为 AAA ),通过一个下三角矩阵 LLL 就可以。LLL 的元素正好就是乘数 lijl_{ij}lij —— 从行 iii 减去乘数乘主元行 jjj。
以 2×22×22×2 的矩阵为例,矩阵 AAA 有四个元素 2,1,6,82,1,6,82,1,6,8,要消去的元素是 666。从行 222 减去 333 乘行 111,这个正向步骤使用消元矩阵 E21E_{21}E21,乘数 l21=3l_{21}=3l21=3。从 UUU 到 AAA 的反向步骤使用 L=E21−1L=E^{-1}_{21}L=E21−1(行 222 加上 333 乘行 111)。正向从 A 到 U:E21A=[10−31][2168]=[2105]=U反向从 U 到 A:E21−1U=[1031][2105]=[2168]=A正向从\,A\,到\,U:\kern 5ptE_{21}A=\begin{bmatrix}1&0\\-3 &1\end{bmatrix}\begin{bmatrix}2&1\\6&8\end{bmatrix}=\begin{bmatrix}2&1\\0&5\end{bmatrix}=U\\[1ex]反向从\,U\,到\,A:\kern 5ptE_{21}^{-1}U=\begin{bmatrix}1&0\\3&1\end{bmatrix}\begin{bmatrix}2&1\\0&5\end{bmatrix}=\begin{bmatrix}2&1\\6&8\end{bmatrix}=A正向从A到U:E21A=[1−301][2618]=[2015]=U反向从U到A:E21−1U=[1301][2015]=[2618]=A上面第二行就是分解 LU=ALU=ALU=A,将 E21−1E_{21}^{-1}E21−1 用 LLL 代替。更大的矩阵会有很多 E′sE'sE′s,L\pmb LL 包含它们所有的逆矩阵。
AAA 到 UUU 的每一个步骤都要左乘一个矩阵 EijE_{ij}Eij,将位置 (i,j)(i,j)(i,j) 的元素变为 000。为了清晰起见,假设没有行交换,如果 AAA 是 3×33×33×3 的矩阵,需要在左边依次乘 E21E_{21}E21,E31E_{31}E31,E32E_{32}E32,乘数 lijl_{ij}lij 将会使得位置 (2,1)(2,1)(2,1),(3,1)(3,1)(3,1),(3,2)(3,2)(3,2) 位置处的元素都变为 000,它们都在对角线下方,消元法在得到一个上三角矩阵后结束。
现在将 E′sE'sE′s 移到另外一边,将它们的逆矩阵乘上 UUU:
(E32E31E21)A=U变为A=(E21−1E31−1E32−1)U就是A=LU(2.6.1)(E_{32}E_{31}E_{21})A=U\kern 10pt变为\kern 10ptA=(E_{21}^{-1}E_{31}^{-1}E_{32}^{-1})U\kern 10pt就是\kern 10pt\pmb{A=LU}\kern 10pt(2.6.1)(E32E31E21)A=U变为A=(E21−1E31−1E32−1)U就是A=LU(2.6.1)
逆矩阵是反序相乘,三个逆矩阵的乘积就是 LLL。我们得到了 A=LUA=LUA=LU。
二、解释与例子
第一点:每一个逆矩阵 E−1E^{-1}E−1 都是下三角矩阵。它的非主对角线元素是 lijl_{ij}lij,用来恢复 −lij-l_{ij}−lij 产生的减法。EEE 和 E−1E^{-1}E−1 的主对角线都是 111。上面的例子中 l21=3l_{21}=3l21=3,E=[10−31]E=\begin{bmatrix}1&0\\-3&1\end{bmatrix}E=[1−301],L=E−1=[1031]L=E^{-1}=\begin{bmatrix}1&0\\3&1\end{bmatrix}L=E−1=[1301]。
第二点:式(2.6.1)展示了一个下三角矩阵(EijE_{ij}Eij 的乘积)乘 AAA,也展示了所有的 Eij−1E_{ij}^{-1}Eij−1 乘 UUU 会得到 AAA。Eij\pmb{E_{ij}}Eij 的逆矩阵的乘积得到的下三角矩阵就是 L\pmb LL。
我们处理这些逆矩阵的一个原因是想要分解 AAA,而不是 UUU。它的 “反向形式” 得到了 A=LUA=LUA=LU。另一个原因是我们会得到更多的信息,LLL 是一个很好的矩阵,这也是第三点。
第三点:每个乘数 lijl_{ij}lij 可以直接放入 LLL 的 (i,j)(i,j)(i,j) 位置,不需要改变。通常矩阵的乘法会将这些位置弄乱,但是在 LLL 里不会。因为逆矩阵的正确顺序,使得 lll 没有发生变化。在式(2.6.3)中会给出原因。
第四点:每个 E−1E^{-1}E−1 的对角线都是 111,LLL 也是如此。
A=LU消元过程中没有行交换.上三角矩阵 U 的主元在它的对角线上.下三角矩阵 L 的主元都是 1 ,乘数 lij 在 L 的对角线下方.\begin{matrix}A=LU\end{matrix}\kern 15pt\begin{matrix}\pmb{消元过程中没有行交换}.上三角矩阵\,U\,的\\主元在它的对角线上.下三角矩阵\,L\,的主\\元都是\,1\,,乘数\,l_{ij}\,在\,L\,的对角线下方.\end{matrix}A=LU消元过程中没有行交换.上三角矩阵U的主元在它的对角线上.下三角矩阵L的主元都是1,乘数lij在L的对角线下方.
【例1】消元法从行 222 减去 12\displaystyle\frac{1}{2}21 乘行 111,最后一步从行 333 减去 23\displaystyle\frac{2}{3}32 乘行 222。下三角矩阵 LLL 有 l21=12l_{21}=\displaystyle\frac{1}{2}l21=21,l32=23l_{32}=\displaystyle\frac{2}{3}l32=32。LULULU 的乘积得到 AAA:A=[210121012]=[10012100231][21003210043]=LUA=\begin{bmatrix}2&1&0\\1&2&1\\0&1&2\end{bmatrix}=\begin{bmatrix}1&0&0\\\displaystyle\frac{1}{2}&1&0\\0&\displaystyle\frac{2}{3}&1\end{bmatrix}\begin{bmatrix}2&1&0\\0&\displaystyle\frac{3}{2}&1\\0&0&\displaystyle\frac{4}{3}\end{bmatrix}=LUA=210121012=1210013200120012300134=LU因为 AAA 的 (3,1)(3,1)(3,1) 元素是 000,所以 (3,1)(3,1)(3,1) 位置的乘数是 000,即不需要进行操作。
【例2】将 AAA 左上角的元素 222 改为 111,变成 BBB。则所有的主元都是 111,所有的乘数也是 111。保持这种模式,当 BBB 是 4×44\times44×4 的矩阵时:B=[1100121001210012]=[1110110011][1100110111]B=\begin{bmatrix}1&1&0&0\\1&2&1&0\\0&1&2&1\\0&0&1&2\end{bmatrix}=\begin{bmatrix}1&&&\\1&1&&\\0&1&1&\\0&0&1&1\end{bmatrix}\begin{bmatrix}1&1&0&0\\&1&1&0\\&&1&1\\&&&1\end{bmatrix}B=1100121001210012=11001101111110110011假设没有行交换,如何可以得知 LLL 和 UUU 中哪些元素为 000 呢?当 A 的某一行从 0 开始,则 L 的该行也从 0 开始当 A 的某一列从 0 开始,则 U 的该列也从 0 开始\pmb{当\,A\,的某一行从\,0\,开始,则\,L\,的该行也从\,0\,开始}\\\pmb{当\,A\,的某一列从\,0\,开始,则\,U\,的该列也从\,0\,开始}当A的某一行从0开始,则L的该行也从0开始当A的某一列从0开始,则U的该列也从0开始如果某一行从 000 开始,那么就不需要消元,LLL 相应的位置就是 000,这将节省电脑的时间。同样的,如果某一列从 000 开始,UUU 相应的位置也为 000。但是,如果 000 在中间,因为消元法是前向消除,这些位置在 LLL 或 UUU 的对应的位置大概率就不再是 000。那么为什么 LLL 相应的位置是乘数 lijl_{ij}lij,而不发生混乱呢?
关键原因是 A\pmb AA 为什么等于 LU\pmb{LU}LU:当主元行下方的行减去时,它们还是 AAA 的原始行吗?不是!因为在消元过程中它们被改变了。那么它们是 UUU 的行吗?是的!因为主元不再改变。当计算 UUU 的第三行时,我们会减去乘数乘 UUU 前面的行(不是 AAA 的行):Row 3 of U=(Row 3 of A)−l31(Row 1 of U)−l32(Row 2 of U)(2.6.2)Row\,\,3\,\,of\,\,U=(Row\,\,3\,\,of\,\,A)-l_{31}(Row\,\,1\,\,of\,\,U)-l_{32}(Row\,\,2\,\,of\,\,U)\kern 19pt(2.6.2)Row3ofU=(Row3ofA)−l31(Row1ofU)−l32(Row2ofU)(2.6.2)改写这个方程,看看行 [l31l321]\begin{bmatrix}l_{31}&l_{32}&1\end{bmatrix}[l31l321] 是如何与 UUU 相乘的:(Row 3 of A)=l31(Row 1 of U)+l32(Row 2 of U)+1(Row 3 of U)(2.6.3)(Row\,\,3\,\,of\,\,A)=l_{31}(Row\,\,1\,\,of\,\,U)+l_{32}(Row\,\,2\,\,of\,\,U)+1(Row\,\,3\,\,of\,\,U)\kern 10pt(2.6.3)(Row3ofA)=l31(Row1ofU)+l32(Row2ofU)+1(Row3ofU)(2.6.3)正好就是 (A=LU)(A=LU)(A=LU) 的第三行。LLL 的行 333 的分量是 l31l_{31}l31,l32l_{32}l32,111。无论 AAA 有多大,所有的行都是这样。如果没有行交换,则有 A=LUA=LUA=LU。
平衡形式 LDU\pmb{LDU}LDU:A=LUA=LUA=LU 是不对称的,因为 UUU 的对角线上是主元,而 LLL 的对角线都是 111。将 UUU 分成一个举着 DDD 和一个新的矩阵 UUU 相乘,矩阵 DDD 是对角线矩阵,它的对角线就是 UUU 的主元,而新的矩阵 UUU 的对角线就会变成 111,其它元素除以该行的主元:
新的上三角矩阵 UUU 的对角线都是 111。与正常的 LULULU 不同的是,新形式中间有一个 DDD:下三角矩阵 L\pmb LL 乘对角线矩阵 D\pmb DD 乘上三角矩阵 U\pmb UU。
矩阵的三角分解可以写A=LU 或 A=LDU矩阵的三角分解可以写\kern 10pt\pmb{A=LU}\,或 \,\pmb{A=LDU}矩阵的三角分解可以写A=LU或A=LDU
当看到 LDULDULDU 的形式时,我们就可以知道 UUU 的对角线都是 111,每一行都除以其第一个非零元素 —— 主元( LULULU中 UUU 的主元 ):[1031][2805]进一步分解为[1031][25][1401](2.6.4)\begin{bmatrix}1&0\\3&1\end{bmatrix}\begin{bmatrix}2&8\\0&5\end{bmatrix}\kern 10pt进一步分解为\kern 10pt\begin{bmatrix}1&0\\3&1\end{bmatrix}\begin{bmatrix}2&\\&5\end{bmatrix}\begin{bmatrix}1&4\\0&1\end{bmatrix}\kern 10pt(2.6.4)[1301][2085]进一步分解为[1301][25][1041](2.6.4)主元 222 和 555 进入了 DDD,行分别除以 222 和 555,得到新的 UUU,它的对角线都是 111。乘数 333 仍然在 LLL 内。
三、一个方形系统 = 两个三角形系统
矩阵 LLL 包含了高斯消元法的记忆,它保存了每次进行消元时的乘数。我们可以使用这些求解 Ax=bA\boldsymbol x=\boldsymbol bAx=b。
当存在右侧的 b\boldsymbol bb 时,则需要 LLL。因子 LLL 和 UUU 完全取决于左侧(矩阵 AAA)。在 Ax=bA\boldsymbol x=\boldsymbol bAx=b 的右侧,我们先使用 L−1L^{-1}L−1 再使用 U−1U^{-1}U−1。该求解步骤会处理两个三角形矩阵。
1、分解(通过对左侧的矩阵 AAA 进行消元,得到 LLL 和 UUU)
2、求解(使用 LLL 对 b\boldsymbol bb 进行前向消元,然后使用 UUU 进行回代求得 x\boldsymbol xx)
以前,我们使用增广矩阵 [Ab]\begin{bmatrix}A&\boldsymbol b\end{bmatrix}[Ab] 同时处理 AAA 和 b\boldsymbol bb。但是电脑大多数会将两侧分开,LLL 和 UUU 都保存有消元的记忆,无论何时我们都可以处理 b\boldsymbol bb。因为这样求解一个单一的系统只需要一个子程序。
那么如何使用 b\boldsymbol bb 呢?首先对右侧使用前向消元法(乘数存储在 LLL 中,现在可以使用),它会将 b\boldsymbol bb 变成一个新的右侧 c\boldsymbol cc,我们现在求解的是 Lc=bL\boldsymbol c=\boldsymbol bLc=b,然后使用回代求解 Ux=cU\boldsymbol x=\boldsymbol cUx=c,原始系统 Ax=bA\boldsymbol x=\boldsymbol bAx=b 就被分解成了两个三角系统:
前向与反向求解Lc=b,然后求解Ux=c(2.6.5)\pmb{前向与反向}\kern 10pt求解\kern 5ptL\boldsymbol c=\boldsymbol b,然后求解\kern 5ptU\boldsymbol x=\boldsymbol c\kern 10pt(2.6.5)前向与反向求解Lc=b,然后求解Ux=c(2.6.5)
要验证 x\boldsymbol xx 就是要求的解,Ux=cU\boldsymbol x=\boldsymbol cUx=c 两侧同时左乘 LLL,得到 LUx=LcLU\boldsymbol x=L\boldsymbol cLUx=Lc 就是 Ax=bA\boldsymbol x=\boldsymbol bAx=b。
强调: 这些步骤并没有新的知识。我们使用前向消元求解三角系统 Lc=bL\boldsymbol c=\boldsymbol bLc=b,然后回代求解 Ux=cU\boldsymbol x=\boldsymbol cUx=c。
【例3】以 Ax=bA\boldsymbol x=\boldsymbol bAx=b 前向消元开始,在 Ux=cU\boldsymbol x=\boldsymbol cUx=c 结束:Ax=bu+2v=54u+9v=21变为u+2v=5v=1Ux=cA\boldsymbol x=\boldsymbol b\kern 10pt\begin{matrix}u+2v=5\\4u+9v=21\end{matrix}\kern 10pt变为\kern 10pt\begin{matrix}u+2v=5\\\kern 24ptv=1\end{matrix}\kern 10ptU\boldsymbol x=\boldsymbol cAx=bu+2v=54u+9v=21变为u+2v=5v=1Ux=c乘数 444 保存在 LLL 中,右侧使用 444 将 212121 变成了 111:Lc=b下三角系统[1041][c]=[521]求得c=[51]L\boldsymbol c=\boldsymbol b\kern 10pt下三角系统\kern 10pt\begin{bmatrix}1&0\\4&1\end{bmatrix}[\boldsymbol c]=\begin{bmatrix}5\\21\end{bmatrix}\kern 5pt求得\kern 5pt\boldsymbol c=\begin{bmatrix}5\\1\end{bmatrix}Lc=b下三角系统[1401][c]=[521]求得c=[51]Ux=c上三角系统[1201][x]=[51]求得x=[31]U\boldsymbol x=\boldsymbol c\kern 10pt上三角系统\kern 10pt\begin{bmatrix}1&2\\0&1\end{bmatrix}[\boldsymbol x]=\begin{bmatrix}5\\1\end{bmatrix}\kern 5pt求得\kern 5pt\boldsymbol x=\begin{bmatrix}3\\1\end{bmatrix}Ux=c上三角系统[1021][x]=[51]求得x=[31]LLL 和 UUU 所使用的也就是以前 AAA 所使用的 n2n^2n2 的存储空间。
四、消元法的成本
这里讨论消元法的成本 —— 即计算时间的问题。我们在计算机上解方程,就需要考虑计算成本,在科学计算时我们可能会遇到大型系统,三维空间的问题就很容易有一百万个未知数,如果计算成本太高的话,我们不可能让计算机计算成百上千年。
消元法的第一阶段是将列 111 的第一主元以下的元素全部变为 000,第一行以下的元素全部都需要改变,而改变一个元素需要一次乘法和一次减法,所以第一阶段大约需要 n2n^2n2 次乘法和 n2n^2n2 次减法,实际上会少一些,因为第一行不变,实际上需要 n(n−1)n(n-1)n(n−1) 次乘法和加法,这里计算的是一个大致成本。
第二阶段我们需要将列 222 的第二主元下方的元素变为 000,此时我们要考虑的矩阵会小一些,是一个 (n−1)×(n−1)(n-1)\times(n-1)(n−1)×(n−1) 的矩阵,所以这一阶段大约是 (n−1)2(n-1)^2(n−1)2 次乘法与减法。越往下进行所要考虑的矩阵越小,最终要得到矩阵 UUU 则粗略估计需要的次数为 n2+(n−1)2+⋯+22+12n^2+(n-1)^2+\cdots+2^2+1^2n2+(n−1)2+⋯+22+12。
上式平方和的公式为 13n(n+12)(n+1)\displaystyle\frac{1}{3}n(n+\frac{1}{2})(n+1)31n(n+21)(n+1),当 nnn 很大时,就可以忽略里面的 12\displaystyle\frac{1}{2}21 和 111,总和大约就是 13n3\displaystyle\frac{1}{3}n^331n3。x2x^2x2 从 000 到 nnn 的积分就是 13n3\displaystyle\frac{1}{3}n^331n3,需要注意的是积分是连续的,而这里是离散的。
对矩阵A使用消元法大概需要 13n3 次乘法和13n3次减法对矩阵 A 使用消元法大概需要 \,\displaystyle\pmb{\frac{1}{3}n^3}\, \pmb{次乘法}和 \displaystyle\frac{1}{3}n^3 次减法对矩阵A使用消元法大概需要31n3次乘法和31n3次减法
下面考虑右侧的 b\boldsymbol bb,我们要计算 Lc=bL\boldsymbol c=\boldsymbol bLc=b,得到 c\boldsymbol cc。首先,我们从 b2,⋯ ,bnb_2,\cdots,b_nb2,⋯,bn 减去乘数乘 b1b_1b1,这里需要 n−1n-1n−1 步,第二阶段就不需要考虑 b1b_1b1,共需要 n−2n-2n−2 步,最后一阶段需要 111 步。
最后考虑回代,通过 Ux=cU\boldsymbol x=\boldsymbol cUx=c 求解 x\boldsymbol xx。首先,计算 xnx_nxn 需要 111 步,仅需要除以最后一个主元;然后计算 xn−1x_{n-1}xn−1 需要 222 步,这里需要代入 xnx_nxn,然后除以第 n−1n-1n−1 主元;最后计算 x1x_1x1 时需要 nnn 步,要代入 (n−1)(n-1)(n−1) 个未知数,然后除以第一主元。所有计算右侧的 b\boldsymbol bb 正好需要需要 n2n^2n2 步(从前到后再回代):[(n−1)+(n−2)+⋯+1]+[1+2+⋯+(n−1)+n]=n2(2.6.6)[(n-1)+(n-2)+\cdots+1]+[1+2+\cdots+(n-1)+n]=n^2\kern 10pt(2.6.6)[(n−1)+(n−2)+⋯+1]+[1+2+⋯+(n−1)+n]=n2(2.6.6)可以看到,右侧的成本要比左侧小很多。
求解右侧需要 n2 次乘法和 n2 次减法\pmb{求解}\kern 15pt右侧需要\,\pmb{n^2\,次乘法}和\,n^2\,次减法求解右侧需要n2次乘法和n2次减法
一个带状矩阵 BBB 只在主对角线的上方和下方有 www 个非零对角线,带状外的其它元素在消元过程中都保持 000 不变(LLL 和 UUU 中)。第一列需要 w2w^2w2 次乘法和减法(在主元下方产生 www 个 000,每个 000 需要使用长度为 www 的主元行),所以要执行完消元过程共需要 nw2nw^2nw2 次乘法和减法,得到 UUU。这样会节省很多时间。
带状矩阵A 到 U13n3减少到nw2求解n2 减少到 2nw\pmb{带状矩阵}\kern 14pt\pmb{A\,到\,U}\kern 8pt\frac{1}{3}n^3减少到nw^2\kern 10pt\pmb{求解}\kern 6ptn^2\,减少到\,2nw带状矩阵A到U31n3减少到nw2求解n2减少到2nw
一个三对角矩阵(w=1w=1w=1)可以计算的很快,不需要存储 000。
五、主要内容总结
- 高斯消元法(没有行交换,且是可逆矩阵)将 AAA 分解成 LLL 乘 UUU。
- 下三角矩阵 LLL 包含用来乘主元行的乘数 lijl_{ij}lij,它们使得 AAA 变成 UUU。乘积 LULULU 将这些行反向加回去可以恢复成 AAA。
- 在右侧我们求解 Lc=bL\boldsymbol c=\boldsymbol bLc=b(前向),然后求解 Ux=cU\boldsymbol x=\boldsymbol cUx=c(反向)。
- 分解: 左侧共有 n3−n3\displaystyle\frac{n^3-n}{3}3n3−n 次乘法和减法(这个结果没有取近似)。
- 求解: 右侧共有 n2n^2n2 次乘法和减法。
- 对于带状矩阵,需要的步骤 13n3\displaystyle\frac{1}{3}n^331n3 变为 nw2nw^2nw2,n2n^2n2 变为 2nw2nw2nw。
六、例题
【例4】下三角帕斯卡矩阵 LLL 包含著名的 “帕斯卡三角形”,这里我们分解帕斯卡。
对称帕斯卡矩阵 P\pmb PP 是帕斯卡矩阵 L\pmb LL 和 U\pmb UU 的乘积。对称的 PPP 矩阵以帕斯卡三角命名,所以它的每个元素都是其上方和左侧元素之和。MATLAB 中,n×nn\times nn×n 的对称 PPP 矩阵写成 pascal(n)。
问题:建立一个下 - 上三角分解的 P=LUP=LUP=LU。pascal(4)=[1111123413610141020]=[1000110012101331][1111012300130001]=LU\textrm{pascal(4)}=\begin{bmatrix}\pmb1&\pmb1&\pmb1&\pmb1\\\pmb1&\pmb2&\pmb3&4\\\pmb1&\pmb3&6&10\\\pmb1&4&10&20\\\end{bmatrix}=\begin{bmatrix}\pmb1&0&0&0\\\pmb1&\pmb1&0&0\\\pmb1&\pmb2&\pmb1&0\\\pmb1&\pmb3&\pmb3&\pmb1\end{bmatrix}\begin{bmatrix}\pmb1&\pmb1&\pmb1&\pmb1\\0&\pmb1&\pmb2&\pmb3\\0&0&\pmb1&\pmb3\\0&0&0&\pmb1\end{bmatrix}=LUpascal(4)=1111123413610141020=11110123001300011000110012101331=LU预测并检验 5×55\times55×5 的帕斯卡矩阵的下一行和下一列。
解: 计算 LULULU 可以得到 PPP。下面从对称 PPP 矩阵出发,利用消元法得到上三角矩阵 UUU:P=[1111123413610141020]→[11110123025903919]→[11110123001300310]→[1111012300130001]=UP=\begin{bmatrix}1&1&1&1\\1&2&3&4\\1&3&6&10\\1&4&10&20\end{bmatrix}\rightarrow\begin{bmatrix}1&1&1&1\\0&1&2&3\\0&2&5&9\\0&3&9&19\end{bmatrix}\rightarrow\begin{bmatrix}1&1&1&1\\0&1&2&3\\0&0&1&3\\0&0&3&10\end{bmatrix}\rightarrow\begin{bmatrix}1&1&1&1\\0&1&2&3\\0&0&1&3\\0&0&0&1\end{bmatrix}=UP=1111123413610141020→10001123125913919→10001100121313310→1000110012101331=U上面步骤所用到的乘数 lijl_{ij}lij 会进入到下三角矩阵 LLL,P=LUP=LUP=LU 是一个特别整洁有序的例子。注意到 UUU 的在对角线上的主元都是 111。
若使用 MATLAB 来计算,指令 lu(pascal(4)) 无法生成上述的 UUU,这是因为 lu 的子程序会在每一列选取最大的主元,这样第二主元就变成了 333,而不是 111,但是使用乔里斯基(Cholesky)分解不会发生行交换,可以产生上述结果:U = chol(pascal(4))
【例5】问题:求解 Px=b=(1,0,0,0)P\boldsymbol x=\boldsymbol b=(1,0,0,0)Px=b=(1,0,0,0)。方程的右侧等于 III 的第一列,这表明 x\boldsymbol xx 会是 P−1P^{-1}P−1 的第一列。这就是高斯 - 若尔当消元法,会匹配 PP−1=IPP^{-1}=IPP−1=I 的列。我们已知帕斯卡矩阵 LLL 和 UUU 是 PPP 的两个因子:两个三角系统Lc=b (前向)Ux=c (后向)\pmb{两个三角系统}\kern 20ptL\boldsymbol c=\boldsymbol b\,(前向)\kern 10ptU\boldsymbol x=\boldsymbol c\,(后向)两个三角系统Lc=b(前向)Ux=c(后向)解: 下三角系统 Lc=bL\boldsymbol c=\boldsymbol bLc=b 由上到下求解c1=1c1+c2=0c1+2c2+c3=0c1+3c2+3c3+c4=0解得c1=+1c2=−1c3=+1c4=−1\begin{matrix}c_1\kern 74pt=1\\c_1+c_2\kern 53pt=0\\c_1+2c_2+c_3\kern 27pt=0\\c_1+3c_2+3c_3+c_4=0\end{matrix}\kern 10pt解得\kern 10pt\begin{matrix}c_1=+1\\c_2=-1\\c_3=+1\\c_4=-1\end{matrix}c1=1c1+c2=0c1+2c2+c3=0c1+3c2+3c3+c4=0解得c1=+1c2=−1c3=+1c4=−1利用 L−1L^{-1}L−1 执行前向消元,得到上三角形系统 Ux=cU\boldsymbol x=\boldsymbol cUx=c,使用回代求解 x\boldsymbol xx,上三角系统由下到上求解:x1+x2+x3+x4=1x2+2x3+3x4=−1x3+3x4=1x4=−1解得x1=+4x2=−6x3=+4x4=−1\begin{matrix}x_1+x_2+x_3+x_4=1\\\kern 22ptx_2+2x_3+3x_4=-1\\\kern 44ptx_3+3x_4=1\\\kern 81ptx_4=-1\end{matrix}\kern 10pt解得\kern 10pt\begin{matrix}x_1=+4\\x_2=-6\\x_3=+4\\x_4=-1\end{matrix}x1+x2+x3+x4=1x2+2x3+3x4=−1x3+3x4=1x4=−1解得x1=+4x2=−6x3=+4x4=−1使用 inv(pascal(4)) 指令求得 PPP 的逆矩阵,可以看到解就是 P−1P^{-1}P−1 的第一列。
【例6】对于 6×66\times66×6 的第二差分常对角(constant-diagonal)矩阵 KKK,将主元和乘数放入 K=LUK=LUK=LU。(LLL 和 UUU 有两个非零对角线,因为 KKK 有三个)。找到 L−1L^{-1}L−1 的 i,ji,ji,j 元素的公式。
**解:
format rat; % 切换成分数显示
K = toeplitz([2 -1 0 0 0 0]) % 生成常对角矩阵,特普利兹 toeplitz 矩阵,这里参数是其第一行
[L U] = lu(K); % 对 K 进行 LU 分解
inv(L) % 求 L 的逆矩阵
从 MATLAB 运行的结果可以得出其 L−1L^{-1}L−1 的 i,ji,ji,j 位置元素的公式是:ji,i≥j\frac{j}{i},\kern 10pti\geq jij,i≥j