可以使用矩阵向量运算计算对称矩阵,同时保持最少的触发器数吗?
Can a symmetric matrix be computed using matrix-vector operation while maintaining least number of flops?
将 A 视为一个 nxn 矩阵。它不是一个特殊的矩阵,在最坏的情况下,它的所有条目都不为零。我正在寻找一种使用矩阵向量运算来计算 AA^T 的方法。触发器的总数是 (2n-1)*(n(n+1))/2 因为对于像 C=AA^T 这样的对称矩阵,我所要做的就是计算对角线整体,即 C(i, i)=A(i,:)^T * A(i,:)。我现在想要的是计算下三角部分,然后当我完成后我只是说上三角部分与下三角部分相同。问题是我可以在矩阵向量乘法中做到这一点,还是会迫使我执行不必要的乘法(比如在上半部分乘以元素)?很明显,标量计算可行,但我很想知道矩阵向量计算是否可行。
MATLAB 已经足够智能,可以为您完成这项工作。当 MATLAB 遇到像 A*A.' 这样的表达式时,它会识别出两个操作数相同,并会在后台调用一个对称的 BLAS 库函数来进行计算。这个对称函数完全符合您的要求...只执行大约 1/2 的操作并生成精确的对称结果。
将 A 视为一个 nxn 矩阵。它不是一个特殊的矩阵,在最坏的情况下,它的所有条目都不为零。我正在寻找一种使用矩阵向量运算来计算 AA^T 的方法。触发器的总数是 (2n-1)*(n(n+1))/2 因为对于像 C=AA^T 这样的对称矩阵,我所要做的就是计算对角线整体,即 C(i, i)=A(i,:)^T * A(i,:)。我现在想要的是计算下三角部分,然后当我完成后我只是说上三角部分与下三角部分相同。问题是我可以在矩阵向量乘法中做到这一点,还是会迫使我执行不必要的乘法(比如在上半部分乘以元素)?很明显,标量计算可行,但我很想知道矩阵向量计算是否可行。
MATLAB 已经足够智能,可以为您完成这项工作。当 MATLAB 遇到像 A*A.' 这样的表达式时,它会识别出两个操作数相同,并会在后台调用一个对称的 BLAS 库函数来进行计算。这个对称函数完全符合您的要求...只执行大约 1/2 的操作并生成精确的对称结果。