4

我在matlab中有两个稀疏矩阵

大小为 9000x180 万的 M1 和大小为 180 万x180 万的 M2。

现在我需要计算表达式

M1/M2

我花了大约一个小时。正常吗?matlab中是否有任何有效的方法可以克服这个时间问题。我的意思是它很多,如果我进行多次迭代,那么它将继续花费 1 小时。有什么建议吗?

4

1 回答 1

4

基于假设使用一些迭代方法(如共轭梯度或 Kaczmarz 方法)的快速粗略计算,并且插入大小让我相信一个小时还不错。

由于三对角矩阵被“反转”(如果不是明确的),这两种方法都将采用接近“一些接近统一的标量因子”乘以〜9000乘以1.8e6乘以“迭代次数”的指令数收敛所需”。引号中的两件事的乘积可能在 50 左右(最小)到 1000 左右(最大)。我没有精心挑选这些来让你的数学工作,这些是我对完成这些的期望。如果您假设每秒大约 1e9 条指令(这对内存访问等的影响不大),您将得到大约 13 分钟到大约 4.5 小时。

因此,对于利用稀疏性的算法来说,它似乎在正确的范围内。

如果您了解结构,也许可以更好地利用它,但可能不会太多。

请注意,这并不是说 13 分钟是可以实现的。

编辑:一个旁注,我不确定正在使用什么,但我假设迭代方法。也有可能使用直接方法(如here所述)。如果您利用稀疏权, 这些方法对于稀疏系统可能非常有效。Matlab 很可能默认使用这些,但值得研究 Matlab 在您的情况下正在做什么。

在我有限的经验中,迭代方法通常比直接方法更受欢迎,因为系统的大小变得很大(你的很大)。我们的线性系统也被证明是块三对角线,就像它们在图像处理中经常做的那样。

于 2012-06-12T22:03:34.933 回答