我正在使用 GNU GSL 进行一些矩阵计算。我正在尝试将矩阵 B 与矩阵 A 的逆相乘。
现在我注意到 GSL 的 BLAS 部分有一个功能可以做到这一点,但前提是 A 是三角形的。这有什么具体原因吗?另外,进行此计算的最快方法是什么?我应该使用 LU 分解来反转 A,还是有更好的方法?
FWIW,A 的形式为 P'GP,其中 P 是正规矩阵,P' 是其逆矩阵,G 是对角矩阵。
谢谢一堆:)
最佳答案
我相信 Adrien 是正确的,因为 BLAS 没有方阵的反函数。这取决于您用来优化其逆运算的矩阵。
通常,您可以使用 LU 分解,它适用于任何方阵。即,类似于:
gsl_linalg_LU_decomp(A, p, signum);
gsl_linalg_LU_invert(A, p, invA);
其中 A 是您想要其逆的方阵,p 是
gsl_permutation
对象(对置换矩阵进行编码的置换对象),signum 是置换的符号,invA 是 A 的逆。由于您声明
A = P' G P
是 P
normal 和 G
对角线,因此 A
可能是一个普通矩阵。我已经有一段时间没有使用它们了,但是它们必须有一个分解定理,你可以在 Chapter 14 of the GSL reference manual 中找到,甚至更好,在线性代数书中。举个例子,如果你有对称的正定矩阵并想找到它的逆矩阵,你可以使用 Cholesky 分解,它针对这种矩阵进行了优化。然后你可以在 GSL 中使用
gsl_linalg_cholesky_decomp()
和 gsl_linalg_cholesky_invert()
函数来提高效率。我希望它有帮助!
关于math - GSL/BLAS : Multiply a matrix with an inverse matrix,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3548916/