我需要反转p x p对称带状粗糙矩阵H,它具有7个对角线。 p可能非常高(= 1000或10000)。
H ^ { - 1}可以被认为是带状的,因此,我不需要计算完整的逆矩阵,而是计算它的近似值。 (例如,可以假设它有11或13个对角线。) 我正在寻找一种不暗示并行化的方法。
是否有可能在线性时间内用R构建这样的算法?
感谢您的帮助。
答案 0 :(得分:1)
据我所知,没有线性时间算法。 但你并非完全没有希望:
p < 10K
使用相对优化的实现可能相当快。例如,密集 LU分解最多需要O(p^3)
,p = 1000,这可能需要不到一秒钟。在实践中,稀疏矩阵的实现应该利用稀疏性来实现更好的性能; 将所有内容放在一起我建议你为你的矩阵试用R matrix package。尝试所有可用的签名,并确保安装了高性能BLAS实施。还尝试重写你的调用以计算逆:
# e.g. rewrite...
A_inverse = solve(A)
x = y * A_inverse
# ... as
x = solve(A, y)
对于您的目的而言,这可能会更加微妙,但您应该能够做到这一点,正如软件包文档中所建议的那样:
solve(a, b, ...) ## *the* two-argument version, almost always preferred to
solve(a) ## the *rarely* needed one-argument version
如果所有其他方法都失败了,您可能需要尝试更有效的实施:Matlab,Suite Sparse,PetSC,Eigen或Intel MKL。< / p>