我有兴趣求解线性方程组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)
}
答案 0 :(得分:1)
R函数backsolve
怎么样?它调用Level 3 BLAS routine dtrsm,这可能是你想要做的。一般来说,你不会打败BLAS / LAPACK线性代数例程:它们是疯狂优化的。