我对求解线性方程组 Ax=b 感兴趣,其中 A 是下三角矩阵 (n × n),b 是 (n × 1) 向量,其中 n ≈ 600k。
我在 R 中编码了回代,它对于大小不超过 1000 的矩阵工作得很快,但对于较大的 n (≈ 600k) 真的很慢。我知道天真的回代是 O(n^2)。
我的 R 函数如下;有没有人知道一种更有效的(矢量化、并行化等)方法,它可以扩展到大 n?
回代

backsub=function(X,y)
{
 l=dim(X)
 n=l[1]
 p=l[2]
 y=as.matrix(y)

   for (j in seq(p,1,-1))
    {
      y[j,1]=y[j,1]/X[j,j]
      if((j-1)>0)
         y[1:(j-1),1]=y[1:(j-1),1]-(y[j,1]*X[1:(j-1),j])
    }
    return(y)
}

最佳答案

R 函数 backsolve 怎么样?它调用 Level 3 BLAS routine dtrsm 这可能是你想要做的。一般来说,你不会打败 BLAS/LAPACK 线性代数例程:它们被疯狂优化。

关于r - R中的高效三角回代,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31145978/

10-12 19:27