gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:23:11 26 4
gpt4 key购买 nike

我有很多大型(大约 5000 x 5000)矩阵需要在 Matlab 中求逆。我实际上需要逆函数,所以我不能改用 mldivide,这对于只求解一个 b 的 Ax=b 来说要快得多。

我的矩阵来自一个问题,这意味着它们有一些不错的属性。首先,它们的行列式是 1,所以它们绝对是可逆的。不过,它们不可对角化,否则我会尝试将它们对角化、反转它们,然后再放回去。他们的条目都是实数(实际上是有理数)。

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

最佳答案

I actually need the inverse, so I can't use mldivide instead,...

那不是真的,因为您仍然可以使用 mldivide得到逆。注意 A<sup>-1</sup> = A<sup>-1</sup> * I .在 MATLAB 中,这相当于

invA = A\speye(size(A));

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


First off, their determinant is 1 so they're definitely invertible

而不是 det(A)=1 , 它是 condition number of your matrix这决定了逆的准确性或稳定性。注意 det(A)=∏<sub>i=1:n</sub> λ<sub>i</sub> .所以只需设置 λ<sub>1</sub>=M , λ<sub>n</sub>=1/Mλ<sub>i≠1,n</sub>=1会给你det(A)=1 .然而,作为 M → ∞ , cond(A) = M<sup>2</sup> → ∞λ<sub>n</sub> → 0 ,这意味着您的矩阵正在接近奇点,并且在计算逆时会有很大的数值误差。


My matrices are coming from a problem that means they have some nice properties.

当然,如果您的矩阵是稀疏矩阵或具有其他有利属性,则可以采用其他更高效的算法。但是,如果没有关于您的具体问题的任何其他信息,就没有什么可以说的了。


I would prefer a way to speed Matlab up

MATLAB 使用高斯消元法计算一般矩阵(满秩、非稀疏、没有任何特殊属性)的逆矩阵,使用 mldivide这是Θ(n<sup>3</sup>) , 其中n是矩阵的大小。所以,在你的情况下,n=5000还有1.25 x 10<sup>11</sup>浮点运算。因此,在一台具有大约 10 Gflops 计算能力的合理机器上,您将需要至少 12.5 秒来计算逆,并且没有办法解决这个问题,除非您利用“特殊属性”(如果它们是可利用的)

关于algorithm - 有没有一种快速的方法来在 Matlab 中反转矩阵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6509298/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com