LAPACK:具有多个右手边的三角形方程组



我有一个简单的三角形n x n矩阵,比如L(用于下三角形),我想解决像这样的系统

LX=B

其中BXn x k矩阵(即:我想求解一个具有多个右手边的三角形线性系统)。此外,我有我的三角矩阵存储在打包格式;即我只存储下三角部分。我正在使用BLAS和LAPACK,但我意识到没有具体的方法来解决我的问题。尽管有许多功能可以解决类似的问题:

stpsv():采用压缩格式的三角形矩阵,并求解单个右手边。

strsm():采用密集格式的三角形矩阵,求解多个右手边。

我真正需要的是两者的结合。我希望有一个函数可以接受压缩三角形格式,如stpsv()中所示,也可以接受多个右手边,如
strsm()

所以我的问题是:

  1. 有什么函数可以接受一个压缩三角矩阵并求解多个右手边吗?

  2. 如果答案是否定的,什么会更有效率?要么我在for循环中为B中的每一列调用stpsv(),要么我从L创建一个密集矩阵,这样我就有了所有无用的零,然后我调用strsm()。什么会更好?此外,也许我错过了一个更聪明的方法来做这一切。

压缩存储意味着BLAS2例程。除此之外,BLAS3函数在求解线性系统时更有效,但它们适用于最优分块算法。如果您调用BLAS2函数,那么您基本上会返回到矢量化版本,因此它没有太大意义。

请注意,BLAS2版本也不执行条件检查。因此,它们直接针对BLAS2性能进行了优化,因为具有单个RHS的三角矩阵是直接的反向替换。

对于多个RHS,您可以通过转换矩阵,例如stpttr,然后使用strtrs

是的,对于压缩三角矩阵a和多重右手大小B,有一个函数可以求解Ax=B。它是LAPACK中的stptrs()。此外,三角形压缩矩阵还有其他例程,根据LAPACK的命名约定,所有例程的名称中都包含tp

然而,查看源代码可以发现,该函数在循环中从BLAS调用stpsv(),每右侧调用一次。这正是你的建议!

相关内容

  • 没有找到相关文章

最新更新