【问题标题】:efficient computation of Trace(AB^{-1}) given A and B给定 A 和 B 的 Trace(AB^{-1}) 的有效计算
【发布时间】:2011-11-22 10:32:11
【问题描述】:

我有两个方阵 A 和 B。A 是对称的,B 是对称正定的。我想计算 $trace(A.B^{-1})$。现在,我计算 B 的 Cholesky 分解,求解方程 $A=C.B$ 中的 C 并对对角线元素求和。

有没有更有效的处理方式?

我打算使用 Eigen。如果矩阵是稀疏的(A 通常可以是对角线,B 通常是带对角线),您能否提供一个实现?

【问题讨论】:

  • 我认为 C++ 标签确实属于这里,因为问题是关于使用 C++ 矩阵操作库 Eigen 的实现。
  • 是半正定还是正定?
  • @DavidZaslavsky 我删除了标签
  • @FooBah A 是一个样本方差协方差矩阵。我很想说它是 spd,但我不确定。
  • 如果是协方差矩阵,肯定是半定的。

标签: math matrix sparse-matrix eigen


【解决方案1】:

如果B 是稀疏的,那么求解x_i 中的x_i 可能是有效的(即O(n),假设B 的良好条件数)

B x_i = a_i

(示例Conjugate Gradient 代码在维基百科上给出)。以a_iA 的列向量,得到矩阵B^{-1} A,时间为O(n^2)。然后您可以对对角线元素求和以获得迹线。通常,执行这种稀疏逆乘法比获得完整的特征值集更容易。 为了比较,Cholesky decomposition 是 O(n^3)。请参阅下面 Darren Engwirda 关于 Cholesky 的评论)。

如果你只需要一个近似的轨迹,你实际上可以通过平均将成本降低到 O(q n)

r^T (A B^{-1}) r

超过q 随机向量r。通常q << n。这是一个无偏估计,前提是随机向量r 的分量满足

< r_i r_j > = \delta_{ij}

其中&lt; ... &gt; 表示r 分布的平均值。例如,分量r_i 可以是具有单位方差的独立高斯分布。或者它们可以从 +-1 中统一选择。通常,轨迹的比例为 O(n),轨迹估计中的误差比例为 O(sqrt(n/q)),因此 relative 误差的比例为 O(sqrt(1/nq)) .

【讨论】:

  • 感谢您的回答。你如何用 r 进行平均?从您写的内容来看,您似乎需要计算 A.B^{-1} 这可能不是您想说的。
  • Kipton 可能意味着您应该通过首先求解 B x = r 然后计算 r^T A x 来计算 r^T A B^{-1} r。但我不明白他如何获得概率方法的 O(n) 成本:解决 n 个成本为 O(n) 的系统,每个系统的成本为 O(n^2)。也许随机向量的数量可以取小于 n = A 的大小?
  • @Kipton Barros:sparse Cholesky 分解的复杂性绝对不是O(N^3) - 那将是密集分解,稀疏情况通常要快得多。使用PCG 求解器求解N 线性系统将导致至少 O(N|B|) 复杂度,在对角线B 的情况下仅为O(N^2)。我可能会以“好的”稀疏分解包为基准,也许是CHOLMOD
  • @Darren,感谢有关 Cholesky 分解的更正。
【解决方案2】:

如果广义特征值的计算效率更高,您可以计算广义特征值A*v = lambda* B *v,然后对所有 lambdas 求和。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2019-05-22
    • 1970-01-01
    相关资源
    最近更新 更多