我对求解线性方程组 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/