假设我有一个大的(但可能是稀疏的)矩阵A
,其维度为 K-by-K 。我有另一个 K-by-1 向量,b
。
让Ax=b
。如果我只对n
的{{1}}行n < K
感兴趣,那么在MATLAB中处理此问题的一种方法是计算x
并取第一个x=A\b
元素。
如果维度n
太大而整个计算不可行,还有其他方法来获取这些元素吗?
答案 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]
,其中A11
是n 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.