仅计算矩阵乘积的必要行

时间:2017-02-16 15:13:37

标签: matlab sparse-matrix matrix-multiplication

假设我有一个大的(但可能是稀疏的)矩阵A,其维度为 K-by-K 。我有另一个 K-by-1 向量,b

Ax=b。如果我只对n的{​​{1}}行n < K感兴趣,那么在MATLAB中处理此问题的一种方法是计算x并取第一个x=A\b元素。

如果维度n太大而整个计算不可行,还有其他方法来获取这些元素吗?

2 个答案:

答案 0 :(得分:1)

我想一种方法是重新排列A列和x行,以便您感兴趣的元素出现在x的末尾。然后你会减少[A,b]到行梯形式。最后,为了获得你所追求的组件,你可以使用修改后的A的右下角nxn子矩阵(我们称之为An)并解决缩减系统An * xn = bn,其中xn表示你的x的潜艇感兴趣的是,bn表示行梯队缩减后的最后n行b。

我的意思是,这里到echelon表单的转换仍然很昂贵,但你不需要为x中的其余组件求解,这可以节省你的时间。

答案 1 :(得分:1)

只是一个想法:你可以尝试使用Block Matrix反转:如果你将矩阵阻塞到A = [A11, A12;A21, A22],其中A11n x n,你可以计算其反转的块{ {1}}通过Block Matrix Inversion。它有不同的版本,你可以使用你使用的Schur补码只有大小B = inv(A) = [B11, B12;B21, B22]的版本。我不太确定是否可以避免任何与n x n缩放的反转,但你可以调查一下。

您的解决方案是K。它可以帮助您免于计算B21,B22。不过,我不确定它是否值得。取决于我猜的尺寸。

这是一个版本,虽然这仍然需要A22的倒数,即x(1:n) = [B11, B12]*b

(K-n)x(K-n)

编辑:当然,这会明确地计算反向&#34;&#34;因此可能比解决LSE慢得多。值得一提的是,如果你有几个向量b你想要适合固定的A.