有没有一种快速的方法来反转Matlab中的矩阵?

Dan*_*iel 13 algorithm performance matlab matrix matrix-inverse

我有很多大的(大约5000 x 5000)矩阵,我需要在Matlab中反转.我实际上需要逆,所以我不能使用mldivide,这对于解决一个b的Ax = b要快得多.

我的矩阵来自一个问题,这意味着他们有一些不错的属性.首先,他们的决定因素是1,所以他们肯定是可逆的.但它们不是可对角化的,或者我会尝试对它们进行对角化,将它们反转,然后将它们放回去.他们的条目都是实数(实际上是理性的).

我正在使用Matlab来获取这些矩阵,对于这些东西,我需要对它们的反转进行处理,所以我更喜欢一种方法来加速Matlab.但是,如果有另一种语言,我可以使用它会更快,那么请让我知道.我不知道很多其他语言(一点点但只有C和一点点但是Java),所以如果它在其他语言中真的很复杂,那么我可能无法使用它.请继续并建议,以防万一.

abc*_*bcd 19

我实际上需要逆,所以我不能使用mldivide,...

这不是真的,因为你仍然可以mldivide用来得到逆.请注意.在MATLAB中,这相当于A-1 = A-1 * I

invA = A\speye(size(A));
Run Code Online (Sandbox Code Playgroud)

在我的机器上,5000x5000矩阵需要大约10.5秒.请注意,MATLAB确实具有inv计算矩阵的逆的函数.虽然这将花费大约相同的时间,但在数值准确性方面效率较低(链接中的更多信息).


首先,他们的决定因素是1,所以他们肯定是可逆的

而不是det(A)=1,矩阵条件数决定了逆的准确性或稳定性.请注意.所以只设置,并且会给你.然而,as ,并且,意味着你的矩阵接近奇点,并且在计算逆时会出现大的数值误差.det(A)=?i=1:n ?i?1=M?n=1/M?i?1,n=1det(A)=1M ? ?cond(A) = M2 ? ??n ? 0


我的矩阵来自一个问题,这意味着他们有一些不错的属性.

当然,如果您的矩阵稀疏或具有其他有利属性,还可以使用其他更有效的算法.但是没有任何关于你的具体问题的额外信息,没有什么可以说的了.


我更喜欢一种加速Matlab的方法

MATLAB使用高斯消元来计算的一般矩阵的逆矩阵(满秩,非稀疏,而没有任何特殊的性质)使用mldivide,这是,在这里是矩阵的大小.所以,在你的情况下,还有浮点运算.因此,在具有大约10 Gflops计算能力的合理计算机上,您将需要至少12.5秒来计算逆,除非您利用"特殊属性"(如果它们可被利用),则无法解决这个问题. )?(n3)nn=50001.25 x 1011


Ble*_*Key 7

无论使用何种语言,反转任意5000 x 5000矩阵在计算上都不容易.我建议调查近似值.如果你的矩阵是低等级的,你可能想尝试低等级近似M = USV'

以下是数学溢出的更多想法:

https://mathoverflow.net/search?q=matrix+inversion+approximation

  • shmeh.仅仅因为矩阵具有det(A)== 1并不意味着低秩近似对于工程目的来说不够好.参见例如A = diag([1e5,1,1e-5]).A的确定仍为1,但如果您出于某些目的使用它,A也可能是诊断([1e5 0 0]). (2认同)