Math GSL/BLAS:将矩阵与逆矩阵相乘
我正在使用GNU GSL做一些矩阵计算。我想用矩阵a的逆矩阵乘以矩阵B 现在我注意到GSL的BLAS部分有一个函数来实现这一点,但前提是a是三角形。有没有具体的原因?还有,进行这种计算的最快方法是什么?我应该使用LU分解来反转A,还是有更好的方法 FWIW,A的形式为p'GP,其中p是正规矩阵,p'是其逆矩阵,G是对角矩阵 非常感谢:)简而言之: 只支持三角矩阵的事实很简单,因为对三角矩阵(其回叫替换)执行此操作非常容易,而BLAS仅为低级函数提供例程。任何更高级别的函数通常都可以在LAPACK中找到,LAPACK在内部使用BLAS进行分块操作 在您处理的特定情况下:Math GSL/BLAS:将矩阵与逆矩阵相乘,math,matrix,linear-algebra,gsl,Math,Matrix,Linear Algebra,Gsl,我正在使用GNU GSL做一些矩阵计算。我想用矩阵a的逆矩阵乘以矩阵B 现在我注意到GSL的BLAS部分有一个函数来实现这一点,但前提是a是三角形。有没有具体的原因?还有,进行这种计算的最快方法是什么?我应该使用LU分解来反转A,还是有更好的方法 FWIW,A的形式为p'GP,其中p是正规矩阵,p'是其逆矩阵,G是对角矩阵 非常感谢:)简而言之: 只支持三角矩阵的事实很简单,因为对三角矩阵(其回叫替换)执行此操作非常容易,而BLAS仅为低级函数提供例程。任何更高级别的函数通常都可以在LAPACK
A:=p'*G*p
,如果p
是一个正规矩阵,那么A
的逆矩阵可以写成inv(A):=p'*inv(G)*p
。然后您有两个选项:
inv(A)
并与B相乘
inv(A)
的不同因子相乘:将B
与P
相乘(在左侧),然后用G
的对角元素的倒数重新缩放结果的每一行,然后再次与P'
相乘(再次在左侧)李>
根据具体情况,您可以选择您的方法。无论如何,您需要dgemm
(矩阵乘法,Lvl3 BLAS)和dscal
(行的缩放,Lvl 1 BLAS),假设为双精度
希望这有帮助
A.我相信阿德里安是正确的,因为BLAS没有平方矩阵的反函数。这取决于您用来优化其逆运算的矩阵 通常,您可以使用LU分解,它对任何平方矩阵都有效。例如,类似于:
gsl_linalg_LU_decomp(A, p, signum);
gsl_linalg_LU_invert(A, p, invA);
其中A是要求逆的方阵,p是gsl_置换
对象(置换矩阵编码的置换对象),signum是置换的符号,invA是A的逆
由于您声明A=p'gp
为p
正常和G
对角线,因此A
可能是正常矩阵。我已经有一段时间没有使用它们了,但是必须有一个关于它们的因式分解定理,你可以在线性代数书中找到,甚至更好
举个例子,如果你有对称正定矩阵,并且想找到它的逆矩阵,你可以使用Cholesky分解,它是为这类矩阵优化的。然后可以在gsl中使用gsl\u linalg\u cholesky\u decomp()
和gsl\u linalg\u cholesky\u invert()
函数来提高效率
我希望有帮助 谢谢你的回复。我不确定这种排列是从哪里来的。你有没有因为我的一个矩阵叫“P”而混淆了什么?你说得对,本质上我可以把我的问题重新表述为(P')*GPX=B,但我看不出你如何进一步推导出你的建议?你介意详细说明一下吗?另外,请不要因为我的矩阵A是由P'GP组成的,这不是某种特征值分解,如果你按照这些思路思考的话,。。。我之前在研究排列矩阵,。。。我将编辑此帖子以更正。