我正在使用 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 PP 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/

10-12 18:24