我有一个简单的三角形n x n
矩阵,比如L
(用于下三角形),我想解决像这样的系统
LX=B
其中B
和X
是n x k
矩阵(即:我想求解一个具有多个右手边的三角形线性系统)。此外,我有我的三角矩阵存储在打包格式;即我只存储下三角部分。我正在使用BLAS和LAPACK,但我意识到没有具体的方法来解决我的问题。尽管有许多功能可以解决类似的问题:
stpsv():采用压缩格式的三角形矩阵,并求解单个右手边。
strsm():采用密集格式的三角形矩阵,求解多个右手边。
我真正需要的是两者的结合。我希望有一个函数可以接受压缩三角形格式,如stpsv()中所示,也可以接受多个右手边,如
strsm()
所以我的问题是:
有什么函数可以接受一个压缩三角矩阵并求解多个右手边吗?
如果答案是否定的,什么会更有效率?要么我在
for
循环中为B
中的每一列调用stpsv(),要么我从L
创建一个密集矩阵,这样我就有了所有无用的零,然后我调用strsm()。什么会更好?此外,也许我错过了一个更聪明的方法来做这一切。
请注意,BLAS2版本也不执行条件检查。因此,它们直接针对BLAS2性能进行了优化,因为具有单个RHS的三角矩阵是直接的反向替换。
对于多个RHS,您可以通过转换矩阵,例如stpttr
,然后使用strtrs
。
是的,对于压缩三角矩阵a和多重右手大小B,有一个函数可以求解Ax=B。它是LAPACK中的stptrs()
。此外,三角形压缩矩阵还有其他例程,根据LAPACK的命名约定,所有例程的名称中都包含tp
。
然而,查看源代码可以发现,该函数在循环中从BLAS调用stpsv()
,每右侧调用一次。这正是你的建议!