2.6 A 的 LU 分解

news2024/11/28 10:59:26

一、A = LU

线性代数很多关键的概念实际上就是矩阵的分解(factorization)。原始矩阵 A A A 变成两个或三个特殊矩阵的乘积。第一个分解,实际上也是最重要的分解,来自消元法。因子 L L L U U U 都是三角形矩阵,分解 A = L U A=LU A=LU 来自消元法。
矩阵 U U U 是上三角矩阵,它的主元都在对角线上,消元步骤将 A A A 变为 U U U。现在我们要反向这些步骤(将 U U U 变为 A A A ),通过一个下三角矩阵 L L L 就可以。 L L L 的元素正好就是乘数 l i j l_{ij} lij —— 从行 i i i 减去乘数乘主元行 j j j
2 × 2 2×2 2×2 的矩阵为例,矩阵 A A A 有四个元素 2 , 1 , 6 , 8 2,1,6,8 2,1,6,8,要消去的元素是 6 6 6。从行 2 2 2 减去 3 3 3 乘行 1 1 1,这个正向步骤使用消元矩阵 E 21 E_{21} E21,乘数 l 21 = 3 l_{21}=3 l21=3。从 U U U A A A 的反向步骤使用 L = E 21 − 1 L=E^{-1}_{21} L=E211(行 2 2 2 加上 3 3 3 乘行 1 1 1)。 正向从   A   到   U : E 21 A = [ 1 0 − 3 1 ] [ 2 1 6 8 ] = [ 2 1 0 5 ] = U 反向从   U   到   A : E 21 − 1 U = [ 1 0 3 1 ] [ 2 1 0 5 ] = [ 2 1 6 8 ] = 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 正向从AUE21A=[1301][2618]=[2015]=U反向从UAE211U=[1301][2015]=[2618]=A上面第二行就是分解 L U = A LU=A LU=A,将 E 21 − 1 E_{21}^{-1} E211 L L L 代替。更大的矩阵会有很多 E ′ s E's Es L \pmb L L 包含它们所有的逆矩阵
A A A U U U 的每一个步骤都要左乘一个矩阵 E i j E_{ij} Eij,将位置 ( i , j ) (i,j) (i,j) 的元素变为 0 0 0。为了清晰起见,假设没有行交换,如果 A A A 3 × 3 3×3 3×3 的矩阵,需要在左边依次乘 E 21 E_{21} E21 E 31 E_{31} E31 E 32 E_{32} E32,乘数 l i j l_{ij} lij 将会使得位置 ( 2 , 1 ) (2,1) (2,1) ( 3 , 1 ) (3,1) (3,1) ( 3 , 2 ) (3,2) (3,2) 位置处的元素都变为 0 0 0,它们都在对角线下方,消元法在得到一个上三角矩阵后结束。
现在将 E ′ s E's Es 移到另外一边,将它们的逆矩阵乘上 U U U

( E 32 E 31 E 21 ) A = U 变为 A = ( E 21 − 1 E 31 − 1 E 32 − 1 ) U 就是 A = L U ( 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=(E211E311E321)U就是A=LU(2.6.1)

逆矩阵是反序相乘,三个逆矩阵的乘积就是 L L L。我们得到了 A = L U A=LU A=LU

二、解释与例子

第一点:每一个逆矩阵 E − 1 E^{-1} E1 都是下三角矩阵。它的非主对角线元素是 l i j l_{ij} lij,用来恢复 − l i j -l_{ij} lij 产生的减法。 E E E E − 1 E^{-1} E1 的主对角线都是 1 1 1。上面的例子中 l 21 = 3 l_{21}=3 l21=3 E = [ 1 0 − 3 1 ] E=\begin{bmatrix}1&0\\-3&1\end{bmatrix} E=[1301] L = E − 1 = [ 1 0 3 1 ] L=E^{-1}=\begin{bmatrix}1&0\\3&1\end{bmatrix} L=E1=[1301]
第二点:式(2.6.1)展示了一个下三角矩阵( E i j E_{ij} Eij 的乘积)乘 A A A,也展示了所有的 E i j − 1 E_{ij}^{-1} Eij1 U U U 会得到 A A A E i j \pmb{E_{ij}} Eij 的逆矩阵的乘积得到的下三角矩阵就是 L \pmb L L
我们处理这些逆矩阵的一个原因是想要分解 A A A,而不是 U U U。它的 “反向形式” 得到了 A = L U A=LU A=LU。另一个原因是我们会得到更多的信息, L L L 是一个很好的矩阵,这也是第三点。
第三点:每个乘数 l i j l_{ij} lij 可以直接放入 L L L ( i , j ) (i,j) (i,j) 位置,不需要改变。通常矩阵的乘法会将这些位置弄乱,但是在 L L L 里不会。因为逆矩阵的正确顺序,使得 l l l 没有发生变化。在式(2.6.3)中会给出原因。
第四点:每个 E − 1 E^{-1} E1 的对角线都是 1 1 1 L L L 也是如此。

A = L U 消元过程中没有行交换 . 上三角矩阵   U   的 主元在它的对角线上 . 下三角矩阵   L   的主 元都是   1   ,乘数   l i j   在   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,乘数lijL的对角线下方.

例1】消元法从行 2 2 2 减去 1 2 \displaystyle\frac{1}{2} 21 乘行 1 1 1,最后一步从行 3 3 3 减去 2 3 \displaystyle\frac{2}{3} 32 乘行 2 2 2。下三角矩阵 L L L l 21 = 1 2 l_{21}=\displaystyle\frac{1}{2} l21=21 l 32 = 2 3 l_{32}=\displaystyle\frac{2}{3} l32=32 L U LU LU 的乘积得到 A A A A = [ 2 1 0 1 2 1 0 1 2 ] = [ 1 0 0 1 2 1 0 0 2 3 1 ] [ 2 1 0 0 3 2 1 0 0 4 3 ] = L U A=\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}=LU A= 210121012 = 12100132001 20012300134 =LU因为 A A A ( 3 , 1 ) (3,1) (3,1) 元素是 0 0 0,所以 ( 3 , 1 ) (3,1) (3,1) 位置的乘数是 0 0 0,即不需要进行操作。

例2】将 A A A 左上角的元素 2 2 2 改为 1 1 1,变成 B B B。则所有的主元都是 1 1 1,所有的乘数也是 1 1 1。保持这种模式,当 B B B 4 × 4 4\times4 4×4 的矩阵时: B = [ 1 1 0 0 1 2 1 0 0 1 2 1 0 0 1 2 ] = [ 1 1 1 0 1 1 0 0 1 1 ] [ 1 1 0 0 1 1 0 1 1 1 ] 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 = 1100110111 1110110011 假设没有行交换,如何可以得知 L L L U U U 中哪些元素为 0 0 0 呢? 当   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开始如果某一行从 0 0 0 开始,那么就不需要消元, L L L 相应的位置就是 0 0 0,这将节省电脑的时间。同样的,如果某一列从 0 0 0 开始, U U U 相应的位置也为 0 0 0。但是,如果 0 0 0 在中间,因为消元法是前向消除,这些位置在 L L L U U U 的对应的位置大概率就不再是 0 0 0。那么为什么 L L L 相应的位置是乘数 l i j l_{ij} lij,而不发生混乱呢?

关键原因是 A \pmb A A 为什么等于 L U \pmb{LU} LU:当主元行下方的行减去时,它们还是 A A A 的原始行吗?不是!因为在消元过程中它们被改变了。那么它们是 U U U 的行吗?是的!因为主元不再改变。当计算 U U U 的第三行时,我们会减去乘数乘 U U U 前面的行(不是 A A A 的行): R o w    3    o f    U = ( R o w    3    o f    A ) − l 31 ( R o w    1    o f    U ) − l 32 ( R o w    2    o f    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)改写这个方程,看看行 [ l 31 l 32 1 ] \begin{bmatrix}l_{31}&l_{32}&1\end{bmatrix} [l31l321] 是如何与 U U U 相乘的: ( R o w    3    o f    A ) = l 31 ( R o w    1    o f    U ) + l 32 ( R o w    2    o f    U ) + 1 ( R o w    3    o f    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 = L U ) (A=LU) (A=LU) 的第三行。 L L L 的行 3 3 3 的分量是 l 31 l_{31} l31 l 32 l_{32} l32 1 1 1。无论 A A A 有多大,所有的行都是这样。如果没有行交换,则有 A = L U A=LU A=LU

平衡形式 L D U \pmb{LDU} LDU A = L U A=LU A=LU 是不对称的,因为 U U U 的对角线上是主元,而 L L L 的对角线都是 1 1 1。将 U U U 分成一个举着 D D D 和一个新的矩阵 U U U 相乘,矩阵 D D D 是对角线矩阵,它的对角线就是 U U U 的主元,而新的矩阵 U U U 的对角线就会变成 1 1 1,其它元素除以该行的主元:

在这里插入图片描述新的上三角矩阵 U U U 的对角线都是 1 1 1。与正常的 L U LU LU 不同的是,新形式中间有一个 D D D下三角矩阵 L \pmb L L 乘对角线矩阵 D \pmb D D 乘上三角矩阵 U \pmb U U

矩阵的三角分解可以写 A = L U   或   A = L D U 矩阵的三角分解可以写\kern 10pt\pmb{A=LU}\,或 \,\pmb{A=LDU} 矩阵的三角分解可以写A=LUA=LDU

当看到 L D U LDU LDU 的形式时,我们就可以知道 U U U 的对角线都是 1 1 1,每一行都除以其第一个非零元素 —— 主元( L U LU LU U U U 的主元 ): [ 1 0 3 1 ] [ 2 8 0 5 ] 进一步分解为 [ 1 0 3 1 ] [ 2 5 ] [ 1 4 0 1 ] ( 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)主元 2 2 2 5 5 5 进入了 D D D,行分别除以 2 2 2 5 5 5,得到新的 U U U,它的对角线都是 1 1 1。乘数 3 3 3 仍然在 L L L 内。

三、一个方形系统 = 两个三角形系统

矩阵 L L L 包含了高斯消元法的记忆,它保存了每次进行消元时的乘数。我们可以使用这些求解 A x = b A\boldsymbol x=\boldsymbol b Ax=b
当存在右侧的 b \boldsymbol b b 时,则需要 L L L。因子 L L L U U U 完全取决于左侧(矩阵 A A A)。在 A x = b A\boldsymbol x=\boldsymbol b Ax=b 的右侧,我们先使用 L − 1 L^{-1} L1 再使用 U − 1 U^{-1} U1。该求解步骤会处理两个三角形矩阵。

1、分解(通过对左侧的矩阵 A A A 进行消元,得到 L L L U U U
2、求解(使用 L L L b \boldsymbol b b 进行前向消元,然后使用 U U U 进行回代求得 x \boldsymbol x x

以前,我们使用增广矩阵 [ A b ] \begin{bmatrix}A&\boldsymbol b\end{bmatrix} [Ab] 同时处理 A A A b \boldsymbol b b。但是电脑大多数会将两侧分开, L L L U U U 都保存有消元的记忆,无论何时我们都可以处理 b \boldsymbol b b。因为这样求解一个单一的系统只需要一个子程序。
那么如何使用 b \boldsymbol b b 呢?首先对右侧使用前向消元法(乘数存储在 L L L 中,现在可以使用),它会将 b \boldsymbol b b 变成一个新的右侧 c \boldsymbol c c,我们现在求解的是 L c = b L\boldsymbol c=\boldsymbol b Lc=b,然后使用回代求解 U x = c U\boldsymbol x=\boldsymbol c Ux=c,原始系统 A x = b A\boldsymbol x=\boldsymbol b Ax=b 就被分解成了两个三角系统

前向与反向 求解 L c = b ,然后求解 U x = 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 x x 就是要求的解, U x = c U\boldsymbol x=\boldsymbol c Ux=c 两侧同时左乘 L L L,得到 L U x = L c LU\boldsymbol x=L\boldsymbol c LUx=Lc 就是 A x = b A\boldsymbol x=\boldsymbol b Ax=b
强调: 这些步骤并没有新的知识。我们使用前向消元求解三角系统 L c = b L\boldsymbol c=\boldsymbol b Lc=b,然后回代求解 U x = c U\boldsymbol x=\boldsymbol c Ux=c

例3】以 A x = b A\boldsymbol x=\boldsymbol b Ax=b 前向消元开始,在 U x = c U\boldsymbol x=\boldsymbol c Ux=c 结束: A x = b u + 2 v = 5 4 u + 9 v = 21 变为 u + 2 v = 5 v = 1 U x = c A\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 c Ax=bu+2v=54u+9v=21变为u+2v=5v=1Ux=c乘数 4 4 4 保存在 L L L 中,右侧使用 4 4 4 21 21 21 变成了 1 1 1 L c = b 下三角系统 [ 1 0 4 1 ] [ c ] = [ 5 21 ] 求得 c = [ 5 1 ] 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] U x = c 上三角系统 [ 1 2 0 1 ] [ x ] = [ 5 1 ] 求得 x = [ 3 1 ] 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] L L L U U U 所使用的也就是以前 A A A 所使用的 n 2 n^2 n2 的存储空间。

四、消元法的成本

这里讨论消元法的成本 —— 即计算时间的问题。我们在计算机上解方程,就需要考虑计算成本,在科学计算时我们可能会遇到大型系统,三维空间的问题就很容易有一百万个未知数,如果计算成本太高的话,我们不可能让计算机计算成百上千年。
消元法的第一阶段是将列 1 1 1 的第一主元以下的元素全部变为 0 0 0,第一行以下的元素全部都需要改变,而改变一个元素需要一次乘法和一次减法,所以第一阶段大约需要 n 2 n^2 n2 次乘法和 n 2 n^2 n2 次减法,实际上会少一些,因为第一行不变,实际上需要 n ( n − 1 ) n(n-1) n(n1) 次乘法和加法,这里计算的是一个大致成本。
第二阶段我们需要将列 2 2 2 的第二主元下方的元素变为 0 0 0,此时我们要考虑的矩阵会小一些,是一个 ( n − 1 ) × ( n − 1 ) (n-1)\times(n-1) (n1)×(n1) 的矩阵,所以这一阶段大约是 ( n − 1 ) 2 (n-1)^2 (n1)2 次乘法与减法。越往下进行所要考虑的矩阵越小,最终要得到矩阵 U U U 则粗略估计需要的次数为 n 2 + ( n − 1 ) 2 + ⋯ + 2 2 + 1 2 n^2+(n-1)^2+\cdots+2^2+1^2 n2+(n1)2++22+12
上式平方和的公式为 1 3 n ( n + 1 2 ) ( n + 1 ) \displaystyle\frac{1}{3}n(n+\frac{1}{2})(n+1) 31n(n+21)(n+1),当 n n n 很大时,就可以忽略里面的 1 2 \displaystyle\frac{1}{2} 21 1 1 1,总和大约就是 1 3 n 3 \displaystyle\frac{1}{3}n^3 31n3 x 2 x^2 x2 0 0 0 n n n 的积分就是 1 3 n 3 \displaystyle\frac{1}{3}n^3 31n3,需要注意的是积分是连续的,而这里是离散的。

对矩阵 A 使用消元法大概需要   1 3 n 3   次乘法 和 1 3 n 3 次减法 对矩阵 A 使用消元法大概需要 \,\displaystyle\pmb{\frac{1}{3}n^3}\, \pmb{次乘法}和 \displaystyle\frac{1}{3}n^3 次减法 对矩阵A使用消元法大概需要31n3次乘法31n3次减法

下面考虑右侧的 b \boldsymbol b b,我们要计算 L c = b L\boldsymbol c=\boldsymbol b Lc=b,得到 c \boldsymbol c c。首先,我们从 b 2 , ⋯   , b n b_2,\cdots,b_n b2,,bn 减去乘数乘 b 1 b_1 b1,这里需要 n − 1 n-1 n1 步,第二阶段就不需要考虑 b 1 b_1 b1,共需要 n − 2 n-2 n2 步,最后一阶段需要 1 1 1 步。
最后考虑回代,通过 U x = c U\boldsymbol x=\boldsymbol c Ux=c 求解 x \boldsymbol x x。首先,计算 x n x_n xn 需要 1 1 1 步,仅需要除以最后一个主元;然后计算 x n − 1 x_{n-1} xn1 需要 2 2 2 步,这里需要代入 x n x_n xn,然后除以第 n − 1 n-1 n1 主元;最后计算 x 1 x_1 x1 时需要 n n n 步,要代入 ( n − 1 ) (n-1) (n1) 个未知数,然后除以第一主元。所有计算右侧的 b \boldsymbol b b 正好需要需要 n 2 n^2 n2 步(从前到后再回代): [ ( n − 1 ) + ( n − 2 ) + ⋯ + 1 ] + [ 1 + 2 + ⋯ + ( n − 1 ) + n ] = n 2 ( 2.6.6 ) [(n-1)+(n-2)+\cdots+1]+[1+2+\cdots+(n-1)+n]=n^2\kern 10pt(2.6.6) [(n1)+(n2)++1]+[1+2++(n1)+n]=n2(2.6.6)可以看到,右侧的成本要比左侧小很多。

求解 右侧需要   n 2   次乘法 和   n 2   次减法 \pmb{求解}\kern 15pt右侧需要\,\pmb{n^2\,次乘法}和\,n^2\,次减法 求解右侧需要n2次乘法n2次减法

一个带状矩阵 B B B 只在主对角线的上方和下方有 w w w 个非零对角线,带状外的其它元素在消元过程中都保持 0 0 0 不变( L L L U U U 中)。第一列需要 w 2 w^2 w2 次乘法和减法(在主元下方产生 w w w 0 0 0,每个 0 0 0 需要使用长度为 w w w 的主元行),所以要执行完消元过程共需要 n w 2 nw^2 nw2 次乘法和减法,得到 U U U。这样会节省很多时间。

带状矩阵 A   到   U 1 3 n 3 减少到 n w 2 求解 n 2   减少到   2 n w \pmb{带状矩阵}\kern 14pt\pmb{A\,到\,U}\kern 8pt\frac{1}{3}n^3减少到nw^2\kern 10pt\pmb{求解}\kern 6ptn^2\,减少到\,2nw 带状矩阵AU31n3减少到nw2求解n2减少到2nw

一个三对角矩阵( w = 1 w=1 w=1)可以计算的很快,不需要存储 0 0 0

五、主要内容总结

  1. 高斯消元法(没有行交换)将 A A A 分解成 L L L U U U
  2. 下三角矩阵 L L L 包含用来乘主元行的乘数 l i j l_{ij} lij,它们使得 A A A 变成 U U U。乘积 L U LU LU 将这些行反向加回去可以恢复成 A A A
  3. 在右侧我们求解 L c = b L\boldsymbol c=\boldsymbol b Lc=b(前向),然后求解 U x = c U\boldsymbol x=\boldsymbol c Ux=c(反向)。
  4. 分解: 左侧共有 n 3 − n 3 \displaystyle\frac{n^3-n}{3} 3n3n 次乘法和减法(这个结果没有取近似)。
  5. 求解: 右侧共有 n 2 n^2 n2 次乘法和减法。
  6. 对于带状矩阵,需要的步骤 1 3 n 3 \displaystyle\frac{1}{3}n^3 31n3 变为 n w 2 nw^2 nw2 n 2 n^2 n2 变为 2 n w 2nw 2nw

六、例题

例4】下三角帕斯卡矩阵 L L L 包含著名的 “帕斯卡三角形”,这里我们分解帕斯卡。
对称帕斯卡矩阵 P \pmb P P 是帕斯卡矩阵 L \pmb L L U \pmb U U 的乘积。对称的 P P P 矩阵以帕斯卡三角命名,所以它的每个元素都是其上方和左侧元素之和。MATLAB 中, n × n n\times n n×n 的对称 P P P 矩阵写成 pascal(n)。
问题:建立一个下 - 上三角分解的 P = L U P=LU P=LU pascal(4) = [ 1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20 ] = [ 1 0 0 0 1 1 0 0 1 2 1 0 1 3 3 1 ] [ 1 1 1 1 0 1 2 3 0 0 1 3 0 0 0 1 ] = L U \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}=LU pascal(4)= 1111123413610141020 = 1111012300130001 1000110012101331 =LU预测并检验 5 × 5 5\times5 5×5 的帕斯卡矩阵的下一行和下一列。
解: 计算 L U LU LU 可以得到 P P P。下面从对称 P P P 矩阵出发,利用消元法得到上三角矩阵 U U U P = [ 1 1 1 1 1 2 3 4 1 3 6 10 1 4 10 20 ] → [ 1 1 1 1 0 1 2 3 0 2 5 9 0 3 9 19 ] → [ 1 1 1 1 0 1 2 3 0 0 1 3 0 0 3 10 ] → [ 1 1 1 1 0 1 2 3 0 0 1 3 0 0 0 1 ] = U P=\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}=U P= 1111123413610141020 10001123125913919 10001100121313310 1000110012101331 =U上面步骤所用到的乘数 l i j l_{ij} lij 会进入到下三角矩阵 L L L P = L U P=LU P=LU 是一个特别整洁有序的例子。注意到 U U U 的在对角线上的主元都是 1 1 1
若使用 MATLAB 来计算,指令 lu(pascal(4)) 无法生成上述的 U U U,这是因为 lu 的子程序会在每一列选取最大的主元,这样第二主元就变成了 3 3 3,而不是 1 1 1,但是使用乔里斯基(Cholesky)分解不会发生行交换,可以产生上述结果:U = chol(pascal(4))

在这里插入图片描述
例5】问题:求解 P x = b = ( 1 , 0 , 0 , 0 ) P\boldsymbol x=\boldsymbol b=(1,0,0,0) Px=b=(1,0,0,0)。方程的右侧等于 I I I 的第一列,这表明 x \boldsymbol x x 会是 P − 1 P^{-1} P1 的第一列。这就是高斯 - 若尔当消元法,会匹配 P P − 1 = I PP^{-1}=I PP1=I 的列。我们已知帕斯卡矩阵 L L L U U U P P P 的两个因子: 两个三角系统 L c = b   ( 前向 ) U x = c   ( 后向 ) \pmb{两个三角系统}\kern 20ptL\boldsymbol c=\boldsymbol b\,(前向)\kern 10ptU\boldsymbol x=\boldsymbol c\,(后向) 两个三角系统Lc=b(前向)Ux=c(后向)解: 下三角系统 L c = b L\boldsymbol c=\boldsymbol b Lc=b 由上到下求解 c 1 = 1 c 1 + c 2 = 0 c 1 + 2 c 2 + c 3 = 0 c 1 + 3 c 2 + 3 c 3 + c 4 = 0 解得 c 1 = + 1 c 2 = − 1 c 3 = + 1 c 4 = − 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 − 1 L^{-1} L1 执行前向消元,得到上三角形系统 U x = c U\boldsymbol x=\boldsymbol c Ux=c,使用回代求解 x \boldsymbol x x,上三角系统由下到上求解: x 1 + x 2 + x 3 + x 4 = 1 x 2 + 2 x 3 + 3 x 4 = − 1 x 3 + 3 x 4 = 1 x 4 = − 1 解得 x 1 = + 4 x 2 = − 6 x 3 = + 4 x 4 = − 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)) 指令求得 P P P 的逆矩阵,可以看到解就是 P − 1 P^{-1} P1 的第一列。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1295774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自动化测试:PO模式详解!

PO(Page Object)模式是一种在自动化测试中常用的设计模式,将页面的每个元素封装成一个对象,通过操作对象来进行页面的交互。 概括来说就是,每个页面都有对应的PO类,PO类中包含了页面的元素定位和操作方法。…

ArkTS语言难吗?鸿蒙指南

HarmonyOS的开发语言是ArkTS、JS(JavaScript)。 ArkTS简介 ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。因此,在学习…

c语言-动态内存管理

文章目录 一、为什么会有动态内存管理二、申请内存函数1、malloc2、free3、calloc4、realloc 三、常见的动态内存的错误四、练习 一、为什么会有动态内存管理 1.我们一般的开辟空间方式: int a 0;//申请4个字节空间 int arr[10] { 0 };//申请40个字节空间2.这样…

如何运用gpt改写出高质量的文章 (1)

大家好,今天来聊聊如何运用gpt改写出高质量的文章 (1),希望能给大家提供一点参考。 以下是针对论文重复率高的情况,提供一些修改建议和技巧: 如何运用GPT改写出高质量的文章 一、引言 随着人工智能技术的飞速发展,自然…

QT 重定向qdebug输出到自绘界面

因为在嵌入式中调试qt需要查看输出信息,特意写了一个类用户便捷查看qdebug信息 界面如下: 提供了开始,停止,保存,清空,退出功能,具体代码下文给出 文件如下 #ifndef QDEBUGREDIRECT_H #define QDEBUGREDIRECT_H /**qdebug 重定向类 定向到界面控件*李吉磊 2023.12.7* */#in…

vue2中使用jsplumb完成流程图

前言 之前的几个demo都是在vue3中写的,虽然可以直接拿去复用。 但是根据有些看客反馈,想用一个vue2版本的,毕竟很多人开发功能的时间都不是特别富裕。大多时候还是用现成的demo更好一些。 这里我就写一个简易版本的demo,可以实现绘制,并且删除连接线和节点等功能,篇幅也不大…

麻雀1号开发板开箱

麻雀1号是上海睿赛德电子科技有限公司全新推出的一款高性价比音频Wi-Fi开发板,内置RT-Thread,主打 Wi-Fi、音频和摄像头拍照功能,配合丰富的组件及例程,可降低多媒体应用的开发门槛。 开发板介绍 正面: 背面&#x…

手搓图片滑动验证码_JavaScript进阶

手搓图片滑动验证码 背景代码效果图展示网站 背景 在做前端项目开发的时候,少不了登录注册部分,既然有登录注册就少不了机器人验证,验证的方法有很多种,比如短信验证码、邮箱验证码、图片滑动、图片验证码等。 由于鄙人在开发中…

docker安装与详细配置redis

docker安装redis 连接虚拟机 vagrant up //启动虚拟机 vagrant ssh //连接虚拟机进入root用户 su root输入密码:和账户名一样 vagrant 下载redis 直接下载redis镜像,下载redis最新镜像 docker pull redis下载的都是DockerHub中默认的官方镜像 创建文件目…

golang slice 数组针对某个字段进行排序

这里主要用到golang的sort.Sort方法,先看这个函数的简介: 介绍链接:https://books.studygolang.com/The-Golang-Standard-Library-by-Example/chapter03/03.1.html 如何实现: import "sort"// UserInfo 用户信息结构…

Bionorica成功完成SAP S/4HANA升级 提升医药制造业务效率

企业如何成功地将其现有的ERP ECC系统转换升级到SAP S/4HANA, 并挖掘相关潜力来推动其数字化战略?Bionorica应用SNP软件实施了实时ERP套件,为进一步的增长和未来的创新奠定了基础。 草药市场的领导者:Bionorica Bionorica是世界领…

.NET使用分布式网络爬虫框架DotnetSpider快速开发爬虫功能

前言 前段时间有同学在微信群里提问,要使用.NET开发一个简单的爬虫功能但是没有做过无从下手。今天给大家推荐一个轻量、灵活、高性能、跨平台的分布式网络爬虫框架(可以帮助 .NET 工程师快速的完成爬虫的开发):DotnetSpider。 注…

Java实现屏幕截图程序(一)

在Java中,可以使用Robot类来实现屏幕截图程序。Robot类提供了一组用于生成输入事件和控制鼠标和键盘的方法。 Java实现屏幕截图的步骤如下: 导入Robot类 import java.awt.Robot;创建Robot对象 Robot robot new Robot();获取屏幕分辨率信息 Dimensi…

力扣面试题 08.12. 八皇后(java回溯解法)

Problem: 面试题 08.12. 八皇后 文章目录 题目描述思路解题方法复杂度Code 题目描述 思路 八皇后问题的性质可以利用回溯来解决,将大问题具体分解成如下待解决问题: 1.以棋盘的每一行为回溯的决策阶段,判断当前棋盘位置能否放置棋子 2.如何判…

JavaScript <关于逆向RSA非对称加密算法的案例(代码剖析篇)>--案例(五点一)

引用上文: CSDNhttps://mp.csdn.net/mp_blog/creation/editor/134857857 剖析: var bitsPerDigit16; // 每个数组元素可以表示的二进制位数// 数组复制函数,将源数组部分复制到目标数组的指定位置 function arrayCopy(src, srcStart, dest, destStart, n) {var m…

OpenVINS学习1——数据集配置与运行

前言 OpenVINS是基于MSCKF的开源VIO算法,有非常详细的官网文档可以学习使用,将来一段时间的主要实践工作,就是深度掌握这份开源代码。 https://docs.openvins.com/ 一、环境配置与Euroc数据集运行 我的环境是Ubuntu20.04,ROS1&a…

EasyX图形化学习

1.EasyX是什么&#xff1f; 是基于Windows的图形编程&#xff0c;给用户提供函数接口&#xff0c;最终函数调用会由Windows的API实现。 注&#xff1a;EasyX只适配 c 。 2.头文件&#xff1a; <easyx.h>---只包含最新的函数 <graphics.h>---包含<easyx.h&g…

前程无忧接口分析

前程无忧接口分析 所需用到的工具URL解析通过抓包软件或者开发者选项抓取数据包对代码中的参数解析分析对acw_sc__v2进行分析对acw_sc__v2进行转换代码生成生成outPutList数组生成arg2参数生成arg3参数最终的效果 对详情页面的分析对timestamp__1258的生成分析 所需用到的工具 …

一些系统日常运维命令和语句

一、前言 记录一些日常系统运维的命令和语句 二、linux命令与语句 1、linux查看各目录使用磁盘情况 du -h /home home为目录 du -h /home 2.查看内存使用情况 free -h 3、查看进程和CPU使用情况 top top 三、数据库语句 1、统计mysql数据库表数量 SELECT COUNT(*) A…

【爬取二手车并将数据保存在数据库中】

爬取二手车并将数据保存在数据库中 查看网页结构分析爬取步骤解密加密信息将密文解密代码&#xff1a; 进行爬取&#xff1a;爬取函数写入解密文件函数和获取城市函数解密文件&#xff0c;返回正确字符串函数保存到数据库 运行结果 查看网页结构分析爬取步骤 可以看出网页使用…