是否有可能在线性时间内反转对称带状(7对角线)矩阵?

时间:2016-08-10 11:53:03

标签: r sparse-matrix linear matrix-inverse symmetric

我需要反转p x p对称带状粗糙矩阵H,它具有7个对角线。 p可能非常高(= 1000或10000)。

H ^ { - 1}可以被认为是带状的,因此,我不需要计算完整的逆矩阵,而是计算它的近似值。 (例如,可以假设它有11或13个对角线。) 我正在寻找一种不暗示并行化的方法。

是否有可能在线性时间内用R构建这样的算法?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

据我所知,没有线性时间算法。 但你并非完全没有希望:

  1. 您的矩阵并不是那么大,因此对p < 10K使用相对优化的实现可能相当快。例如,密集 LU分解最多需要O(p^3),p = 1000,这可能需要不到一秒钟。在实践中,稀疏矩阵的实现应该利用稀疏性来实现更好的性能;
  2. 你真的,真的,真的需要计算逆?通常可以通过求解等效线性系统来代替显式计算逆。使用迭代求解器等一些方法(例如conjugate gradient)解决线性系统的效率明显提高,因为源矩阵的稀疏模式得以保留,导致工作量减少;计算逆时,即使你知道可以用带状矩阵进行近似,仍然会有大量的填充(添加非零值)
  3. 将所有内容放在一起我建议你为你的矩阵试用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
    

    如果所有其他方法都失败了,您可能需要尝试更有效的实施:MatlabSuite SparsePetSCEigenIntel MKL。< / p>