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
无论使用何种语言,反转任意5000 x 5000矩阵在计算上都不容易.我建议调查近似值.如果你的矩阵是低等级的,你可能想尝试低等级近似M = USV'
以下是数学溢出的更多想法:
https://mathoverflow.net/search?q=matrix+inversion+approximation