作者:JHJ(jianghuijun211@gmail.com)
日期:2012/08/24
欢迎转载,请注明出处
关于正定稀疏矩阵的一种快速求解方法。对Cholesky分解的一种优化。四年前的论文,当时做语音信号处理时写的,现在分享给大家。具体内容见点这里。
1.大型稀疏正定矩阵的cholesky分解
文[1]利用无向图来确定cholesky分解的下三角矩阵的非零结构图,提出了两种算法,即消去图和通过商图找顶点的可达集。本文主要利用有向图来确定cholesky分解的下三角矩阵的非零结构图,采用有向图算法可以进一步减小算法的时间和空间复杂度,提出利用动态规划思想确定顶点的终点集(即文[1]可达集的概念)以及有向图中的消去图算法。本文同时给出了这两种算法的数据结构,这种数据结构有利于大型稀疏矩阵的压缩。
1.1标准choleskey算法时间复杂度分析
本文介绍直接法求解对称正定线性方程组
Ax = b, (1.1)
其中A是N阶大型稀疏对称正定矩阵。应用cholesky分解求解(1.1)是一稳定有效的方法。Cholesky分解的MATLAB算法如下[1]:
for j = 1 : n 1
for i = j : n 2
v(i) = aij 3
for k = 1 : j – 1 4
v(i) = v(i) - gjk *gik; 5
end 6
gij = v(i) / ; 7
end 8
end 9
其中gij为对称正定矩阵A经过Cholesky分解得到的下三角矩阵L。
记s(i)为程序中第i行程序运行的次数。
(1.2)
所以Cholesky分解算法的时间复杂度为。
1.2理论上稀疏矩阵choleskey分解最小时间复杂度
标准choleskey分解计算了下三角矩阵L的主对角线及以下元素的所有值。但是若L为稀疏矩阵,如果我们能事先知道L中非零元素的位置,则我们只需要这些非零元值。显然,这可以很好的降低时间复杂度。
,则δ为矩阵的稀疏密度。
若我们只计算L中非零元的值,则我们可知,
对于第2个for循环,第j列有δ×(n-j+1)个非零元素。
(1.3)
对于第3个for循环,由于第i行有i×δ个非零元素,如果我们只操作第j行的非零元素,则此循环平均次数为t/n。此时
(1.4)
比较式(1.2)、