要求解的集合线性方程的最大大小?(X=AX+B)

计算科学 线性代数 矩阵
2021-12-19 00:22:50

Stack Overflow上也有人问过这个问题

这是一个非常普遍的问题,关于一组线性方程组的最大大小,由当今最快的硬件求解,形式为:

X=AX+B

我们在哪里解决X, 和

  • AN×N一个稀疏的浮点矩阵;

  • BN- 浮点数向量。

这变成X(IA)=B正如我在这里读到的,最好使用分解(而不是矩阵求逆)来解决

您是否知道或参考了基准或论文,该基准或论文给出了一些最大值N拥有当今最快的硬件?假设我可以拥有那个硬件,这是一种心理假设练习。我见过的大多数基准测试都使用N<10000. 我在考虑N>107或更多要在一个月内处理。

请不仅考虑计算维度,还要考虑存储A. 这可能是一个问题,例如,假设N=106,存储将是4×1012字节4 TB 用于一个完全密集的矩阵,我猜这是可以管理的。

最后,解决系统的方法是否可以并行化,以便我可以假设并行化N能变大吗?

后来除了问题:

一个可能的应用是:考虑来自工厂的 N 种产品(例如螺钉、电动机、发动机、汽车)。大多数产品需要来自其他产品的零件,并用作其他更复杂产品的零件,除了一些在商店结束的数量 - 例如电动机。

为了ith我们拥有的产品: Xi=ai,1X1+ai,2X2++ai,NXN+Bi 意味着数量Xi我们的目标是生产需要ai,1X1产品中的物品X1, 到N, 加上Bi这是最终在商店中用于一般消费的东西。

我们的目标是在给定最终需求的情况下找到该问题的解决方案(B) 和“相互依赖”的数量A.

我猜A是稀疏的,但这可能取决于应用程序,例如,丰田声称一辆基本汽车由 30,000 种其他产品组成(全部分解为螺丝)。这就是为什么我提到稀疏但我也选择“温和密集”的最坏情况。

1个回答

对于您的应用程序,密集矩阵技术(例如不同的分解技术)将不起作用。另外,您的矩阵无论如何都是稀疏的,因此您应该使用迭代求解器(例如 Krylov 子空间方法)。这些可以轻松处理您感兴趣的规模问题,并且有几个为并行架构(例如 Petsc、Trilinos)实现的稀疏矩阵求解器库。

使用稀疏矩阵技术有几个优点:

  1. 贮存。谁想存储密集矩阵?您是否有数 TB 的 RAM 等待使用?大多数人不这样做,而且您不应该不得不使用磁盘空间,因为这会削弱任何类型的算法性能。您已经说过您的矩阵 A 是稀疏的,这通常意味着总存储空间应该只有O(N). 所以它应该只需要兆字节来存储您的矩阵和所需的向量,而不是 TB。

  2. 时间。密集矩阵分解采用O(N3)运算,即使是稀疏矩阵。在串行处理器上,方程组与N>107可以很容易地以年为单位来计算分解。即使并行化,您仍然必须处理存储和通信成本。稀疏方法依赖于矩阵向量乘法,这是一种O(N2)密集矩阵的运算,但O(N)稀疏矩阵的运算。通常它需要少于O(N)迭代收敛。一般来说,这将花费更少的时间(如果使用良好的预调节器,可能会花费更少的时间)。

  3. 并行化。因为迭代方法依赖于矩阵向量乘法和向量向量加法,所以它们是高度可并行化的(尤其是在共享内存架构上,也包括分布式内存)。许多库已经为各种架构提供并行支持(再次参见此处)。