3

Cholesky 分解有两种不同的形式:

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/

4

1 回答 1

2
该声明考虑了 Cholesky 分解的整体复杂性,包括平方根(的实现),并且是详细介绍 DSP 上的整个算法的部分的剩余部分。

我现在确实看到,断章取义,该声明具有误导性。因此,要计算括号内的项(在论文中),LDL 需要比 Cholesky 分解更多的操作(操作是复杂的 MAC)。

于 2014-05-06T00:14:18.343 回答