Math GSL/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

我正在使用GNU GSL做一些矩阵计算。我想用矩阵a的逆矩阵乘以矩阵B

现在我注意到GSL的BLAS部分有一个函数来实现这一点,但前提是a是三角形。有没有具体的原因?还有,进行这种计算的最快方法是什么?我应该使用LU分解来反转A,还是有更好的方法

FWIW,A的形式为p'GP,其中p是正规矩阵,p'是其逆矩阵,G是对角矩阵

非常感谢:)

简而言之:

只支持三角矩阵的事实很简单,因为对三角矩阵(其回叫替换)执行此操作非常容易,而BLAS仅为低级函数提供例程。任何更高级别的函数通常都可以在LAPACK中找到,LAPACK在内部使用BLAS进行分块操作

在您处理的特定情况下:
A:=p'*G*p
,如果
p
是一个正规矩阵,那么
A
的逆矩阵可以写成
inv(A):=p'*inv(G)*p
。然后您有两个选项:

  • 构建
    inv(A)
    并与
    B相乘
  • 按顺序将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组成的,这不是某种特征值分解,如果你按照这些思路思考的话,。。。我之前在研究排列矩阵,。。。我将编辑此帖子以更正。