数值分析 第二章 线性方程组的直接方法(3)

数值分析 第二章 线性方程组的直接方法(3)

第二章 线性方程组的直接方法(3)

这一讲,我们来学习平方根法。平方根法也是一种求解线性方程组的三角分解法。之前我们已经讲过了求解三角分解的Doolittle三角分解法,那么平方根法有什么区别呢?

2.5 平方根法

平方根法是用来适用于系数矩阵AA对称正定矩阵的,如果AA为对称正定矩阵,则有唯一分解A=LUA=LU,且ukk>0u_{kk}>0。那么我们可以将矩阵UU继续分解,分解为一个对角矩阵和一个单位上三角矩阵的乘积:

[u11u12...u1nu22...u2nunn]=[u11u22unn][1u12u11...u1nu111...u2nu221]=DM\left[\begin{matrix} u_{11} & u_{12} & ...& u_{1n} \\ & u_{22} & ... & u_{2n} \\ & & \ddots & \vdots \\ & & & u_{nn}\end{matrix}\right]= \left[\begin{matrix} u_{11} & & & \\ & u_{22} & & \\ & & \ddots & \\ & & & u_{nn}\end{matrix}\right]\left[\begin{matrix} 1 & \frac{u_{12}}{u_{11}} & ...& \frac{u_{1n}}{u_{11}} \\ & 1 & ... & \frac{u_{2n}}{u_{22}} \\ & & \ddots & \vdots \\ & & & 1\end{matrix}\right] = DM

则有:A=LDMA=LDM

又因为AA是对称矩阵,那么我们又可以推出(LDM)T=MTDLT=LDM(LDM)^T = M^TDL^T = LDM,所以M=LTM=L^T,所以又可以进一步写成A=LDM=LDLTA=LDM=LDL^T

因为ukk>0u_{kk}>0,那么我们将对角矩阵DD再进一步分解:

D=[u11u22unn][u11u22unn]=D12D12D = \left[\begin{matrix} \sqrt{u_{11}} & & & \\ & \sqrt{u_{22}} & & \\ & & \ddots & \\ & & & \sqrt{u_{nn}}\end{matrix}\right]\left[\begin{matrix} \sqrt{u_{11}} & & & \\ & \sqrt{u_{22}} & & \\ & & \ddots & \\ & & & \sqrt{u_{nn}}\end{matrix}\right] = D^{\frac{1}{2}}D^{\frac{1}{2}}

则有A=LD12D12LT=(LD12)(LD12)T=GGTA=LD^{\frac{1}{2}}D^{\frac{1}{2}}L^T = (LD^{\frac{1}{2}})(LD^{\frac{1}{2}})^T=GG^T,其中,G=LD12G=LD^{\frac{1}{2}}

因此,正定对称矩阵AA经过一系列分解,得到A=GGTA=GG^T,称为对称正定矩阵的Cholesky分解

那么,原来的Ax=bAx=b就转换为了Gy=bGy=bGTx=yG^Tx=y,这就是平方根法。

计算方法

若记G=(gij)G = (g_{ij}),则有:对k=1,2,...,nk=1,2,...,n

{gkk=(akkm=1k1gkm2)12gik=(aikm=1k1gimgkm)÷gkk,i=k+1,...,n\begin{cases}g_{kk} = (a_{kk} - \sum^{k-1}_{m=1}g^2_{km})^{\frac{1}{2}} \\ g_{ik} = (a_{ik} - \sum^{k-1}_{m=1}g_{im}g_{km})\div g_{kk}, i =k+1,...,n\end{cases}

求解顺序:先求GG的都一列,再求第二列,以此类推。

解三角方程Gy=bGy=bGTx=yG^Tx=y,可得:

{yk=(bkm=1k1gkmym)÷gkkxk=(ykm=k+1ngmkxm)÷gkk\begin{cases} y_k = (b_k - \sum^{k-1}_{m=1}g_{km}y_m)\div g_{kk} \\ x_k = (y_k - \sum^{n}_{m=k+1}g_{mk}x_m)\div g_{kk} \end{cases}

例:解线性方程组:

{4x1+2x2+4x3=42x1+10x2x3=174x1x2+6x3=0\begin{cases} 4x_1 + 2x_2+4x_3 = 4 \\ 2x_1+10x_2-x_3=17 \\ 4x_1-x_2+6x_3=0 \end{cases}

通过观察可知,这是一个正定对称矩阵,因此可以使用Cholesky分解

解:

我们表示正定对称的系数矩阵AAGG都可以只写出下三角元素

[4210416][213211]\left[\begin{matrix}4 & & \\ 2 & 10 & \\ 4 & -1 & 6 \end{matrix}\right] \rightarrow \left[\begin{matrix}2 & & \\ 1 & 3 & \\ 2 & -1 & 1 \end{matrix}\right]

所以:

A=[213211][212311]=GGTA = \left[\begin{matrix}2 & & \\ 1 & 3 & \\ 2 & -1 & 1 \end{matrix}\right]\left[\begin{matrix}2 & 1 & 2\\ & 3 & -1 \\ & & 1 \end{matrix}\right] = GG^T

接下来求解三角方程,解方程Gy=bGy=b

[213211][y1y2y3]=[4170]\left[\begin{matrix}2 & & \\ 1 & 3 & \\ 2 & -1 & 1 \end{matrix}\right] \left[\begin{matrix} y_1 \\ y_2 \\ y_3 \end{matrix}\right] = \left[\begin{matrix} 4 \\ 17 \\ 0 \end{matrix}\right],得[y1y2y3]=[251]\left[\begin{matrix} y_1 \\ y_2 \\ y_3 \end{matrix}\right] = \left[\begin{matrix} 2 \\ 5 \\ 1 \end{matrix}\right]

再解GTx=yG^Tx=y

[212311][x1x2x3]=[251]\left[\begin{matrix}2 & 1 & 2\\ & 3 & -1 \\ & & 1 \end{matrix}\right]\left[\begin{matrix} x_1 \\ x_2 \\ x_3 \end{matrix}\right] = \left[\begin{matrix} 2 \\ 5 \\ 1 \end{matrix}\right],得[x1x2x3]=[121]\left[\begin{matrix} x_1 \\ x_2 \\ x_3 \end{matrix}\right] = \left[\begin{matrix} -1 \\ 2 \\ 1 \end{matrix}\right]

平方根法是求对称正定系数线性方程组的三角分解法,对称正定矩阵的Cholesky分解的计算量和存储量均约为一般矩阵的LULU分解的一般。且Cholesky分解具有数值稳定性。