R中的有效三角反置换

R中的有效三角反置换,r,regression,linear-algebra,R,Regression,Linear Algebra,我对解线性方程组Ax=b感兴趣,其中A是下三角矩阵(n×n),b是(n×1)向量,其中n≈ 60万 我在R中对反置换进行了编码,对于大小高达1000的矩阵,反置换运算速度很快,但对于较大的n,反置换运算速度非常慢(≈ 600k)。我知道天真的反置换是O(n^2) 我的R函数如下;有没有人知道一种更有效的(矢量化、并行化等)方法,可以扩展到大n 反替代 R功能如何backsolve?它调用了可能是你想要做的事情。一般来说,你无法打败BLAS/LAPACK线性代数例程:它们被疯狂地优化了。有趣的问题

我对解线性方程组Ax=b感兴趣,其中A是下三角矩阵(n×n),b是(n×1)向量,其中n≈ 60万

我在R中对反置换进行了编码,对于大小高达1000的矩阵,反置换运算速度很快,但对于较大的n,反置换运算速度非常慢(≈ 600k)。我知道天真的反置换是O(n^2)

我的R函数如下;有没有人知道一种更有效的(矢量化、并行化等)方法,可以扩展到大n

反替代
R功能如何
backsolve
?它调用了可能是你想要做的事情。一般来说,你无法打败BLAS/LAPACK线性代数例程:它们被疯狂地优化了。

有趣的问题。您是否已将其与
solve()
进行了基准测试?我认为本机solve函数会相当有效。solve()不会利用矩阵的三角形结构,只会给出天真的O(n^3)。很有趣。所以基本上矩阵已经是简化形式了,你正试图利用它。我只知道+1这个有趣的问题。正如我提到的,这是一个下三角矩阵,这就是为什么反置换可以工作的原因。@BladeRunner反置换从定义上讲是一个顺序操作;我不确定它是否可以通过并行化来改进(除非有一些我不知道的矩阵魔法)。如果您熟悉matlab,这里的第二个示例:可能更有效(我不能确认),因为您的实现看起来像第一个示例
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)
}