简介
平方根法又叫Cholesky分解法,是求解对称正定线性方程组最常用的方法之一。
我们知道,对于一般方阵,为了消除LU分解的局限性和误差的过分积累,而采用了选主元的方法。但对于对称正定矩阵而言,选主元却是完全不必要的。
定理及证明设A为一n阶对称正定矩阵,即A满足A^T=A且对任意的非零实系数向量z,都有z^TAz>0,则我们可以得出如下定理:2
Cholesky分解定理:若矩阵A对称正定,则存在一对角元为正数的下三角阵L,使得
A=LL^T
上式中的L又称为Cholesky因子。
证明:由于A对称正定表明A的全部顺序主子阵均正定,因此可知,存在一个单位下三角阵L'和一个上三角矩阵U,使A=L'U。令:
D=diag(u11,...,u1n),U'=D^(-1)U
则有
U'^TDL'^T=A^T=A=L'DU'
从而
L'^TU'^(-1)=D^(-1)U'^(-T)L'D
上式左边是一个单位上三角矩阵,而右边是一个下三角矩阵,故两边均为单位矩阵。于是,U'=L'^T,从而A=L'DL'^T。由此可知,D的对角元均为正数。令
L=L'diag(,...,
)
则A=LL^T,且L的对角元lii=>0,i=1,...,n 证毕。
应用若线性方程组Ax=b的系数矩阵是对称正定的,我们可按如下的步骤求其解:
1、求A的Cholesky分解:A=LL^T;
2、求解Ly=b得到y,
3、将y回代求解L^Tx=y得到x。
由以上定理的证明可知,Cholesky分解可用不选主元的Gauss消去法来实现。然而,更简单而实用的方法是通过直接比较A=LL^T两边的对应元素来计算L。设L为一下三角形实矩阵,其元素由(i为所在行,j为所在列)确定。
比较A=LL^T两边对应的元素,得关系
其中1i
j
n
首先,由=
再由
=
得
=
/
,i=2,...,n.
这样便得到了矩阵L的第一列元素。假定已经算出L的前k-1列元素,由
得
再由
其中i=k+1,...,n.
得
其中i=k+1,...,n.
这样便又求出了L的第k列元素。这种方法称为平方根法。当然,亦可按行来逐次计算L。由于A的元素被用来计算出
以后不再使用,所以可将L的元素存储在A的对应位置上,这样我们就得到如下算法。
算法(正定矩阵的Cholesky分解)3
for k=1 :n
for i=1:k-1
a[k][k]-=a[k][i]*a[k][i]
end
a[k][k]=sqrt(a[k][k])
for i=k+1:n
for j=1:k-1
a[I][k]-=a[i][j]*a[k][j]
end
a[i][k]/=a[k][k];
end
end
由以上可知,用平方根算法解对称正定线性方程组时,计算L的对角元素需用到开方运算。为了避免开方,我们可求A之如下形式的分解
A=LDL^T
其中L是单位下三角矩阵,D是对角均为正数的对角矩阵。这一分解称作LDL^T分解,是Cholesky分解的变形。比较上式两边对应元素得
其中1i
j
n.
由此可确定和
的计算公式如下:
其中k=1,...,j-1,
其中i=j+1,...,n.
这里j=1,2,...,n.上述这种确定A的分解方法称作改进的平方根方法。实际计算时,是将L的严格下三角元素存储在A的对应位置上,而将D的对角元存储在A的对应的对角位置上,这样我们就得到如下的实用算法。
算法(计算LDL^T分解:改进的平方根法)
for(k=0;k