Cholesky Decomposition有两种不同的形式:
A = M * ctranspose (M)
和LDL表格
A = L * D * ctranspose (L)
其中ctranspose是复杂的转置。
我想知道每个表单的浮点运算次数。维基百科参考了一篇论文Matrix Inversion Using Cholesky Decomposition,其中提到了
当有效实施时,LDL分解的复杂性与Cholesky分解相同(原文如此)。
该论文称Cholesky分解需要n^3/6 + O(n^2)
次操作。然而,维基百科说浮点运算的数量是n^3/3
,我自己的计算也得到了第一种形式。它基本上归结为三角数的总和:
n*(n+1)*(n+2)/6.
这就是我认为论文得到n^3/6
的地方。但对于第一种形式,最内部三重和中的术语是a[i][k]*a[j][k]
,它基本上是一个点积。这是总和中的2 * n浮点运算。所以浮点指针操作应该是n^3/3 + O(n^2)
。如果你看一下LDL形式,最里面的总和是a[i][k]*a[j][k]*d[k]
。这是3 * n浮点指针操作(2次乘法和1次加法)。所以浮点运算应该是n^3/2 + O(n^2)
。
换句话说,LDL表单需要多50%的浮点运算。 我是否正确?我认为论文错了(尽管他们没有定义他们的内容通过操作来表示)。这很重要,因为我正在实现基于LDL格式的Choleksy分解的修改形式,我想估计算法的效率。
也许这个问题更适合https://math.stackexchange.com/
答案 0 :(得分:2)
我现在确实看到这种说法不合时宜。因此,要计算括号内的术语(在论文中),LDL需要比Cholesky分解更多的操作(操作是复杂的MAC)。