我有很多需要在Matlab中求逆的大型(约5000 x 5000)矩阵。实际上,我需要逆运算,因此我不能使用mldivide,这对于仅对一个b求解Ax = b而言要快得多。
我的矩阵来自一个问题,这意味着它们具有一些不错的属性。首先,它们的行列式为1,因此它们绝对是可逆的。但是,它们不是对角线化的,否则我会尝试将它们对角线化,反转它们然后放回去。他们的输入都是实数(实际上是有理数)。
我正在使用Matlab来获取这些矩阵,并且需要使用它们的逆函数来进行处理,因此我更希望采用一种方法来加速Matlab。但是,如果我可以使用另一种语言会更快,那么请告诉我。我不知道很多其他语言(除了C之外,还有Java),因此如果它在某种其他语言中确实很复杂,那么我可能将无法使用它。不过,请继续提出建议,以防万一。
我实际上需要反函数,所以我不能改用mldivide,…
这是不正确的,因为您仍然可以mldivide用来求逆。注意。在MATLAB中,这等效于A-1 = A-1 * I
mldivide
A-1 = A-1 * I
invA = A\speye(size(A));
在我的机器上,5000x5000矩阵大约需要10.5秒。请注意,MATLAB确实具有inv计算矩阵逆的函数。尽管这将花费相同的时间,但在数值精度方面效率较低(链接中的更多信息)。
5000x5000
inv
首先,他们的行列式为1,因此它们绝对是可逆的
而不是det(A)=1,是矩阵的条件编号指示逆矩阵的准确性或稳定性。注意。所以只设置,并且会给你。然而,正如,和,这意味着你的矩阵接近奇异会有在计算反大数值的误差。det(A)=∏i=1:n λi``λ1=M``λn=1/M``λi≠1,n=1``det(A)=1``M → ∞``cond(A) = M2 → ∞``λn → 0
det(A)=1
det(A)=∏i=1:n λi``λ1=M``λn=1/M``λi≠1,n=1``det(A)=1``M → ∞``cond(A) = M2 → ∞``λn → 0
我的矩阵来自一个问题,这意味着它们具有一些不错的属性。
当然,如果矩阵稀疏或具有其他有利属性,则可以使用其他更有效的算法。但是,如果没有有关您的特定问题的任何其他信息,就只能说无话可说了。
我希望有一种方法可以加速Matlab
MATLAB使用Gauss消除法来计算通用矩阵的逆(满秩,非稀疏,没有任何特殊属性)mldivide,这是,其中矩阵的大小。因此,在您的情况下,有浮点运算。因此,在具有大约10 Gflops计算能力的合理机器上,您将需要至少12.5秒的时间来计算反函数,除非您利用“特殊属性”(如果它们是可利用的),否则将没有其他办法。 )Θ(n3)``n``n=5000``1.25 x 1011
Θ(n3)``n``n=5000``1.25 x 1011