我想求解线性方程Ax=b,其中A是40000x400000矩阵,x和b是400000x1数组。当我在 MATLAB 中使用 A\b 时,出现错误"内存不足"。因为矩阵太大,我不能在MATLAB中使用A\b。如何在不使用 Matlab 中的命令 A\b 的情况下解决我的问题。
谢谢你的帮助
问题部分出在 Matlab 上,部分出在您的机器上。
首先,好好想想如果你真的需要用40000x400000来解决这个问题,也许你可以简化它,也许你可以分割你的问题,也许系统是解耦的,只要检查得很好。
对于上下文,要存储 40000x400000 的 8 字节浮点数矩阵,您需要大约 120gb。这可能太多了,您很有可能甚至没有足够的可用磁盘空间。
如果这个矩阵有很多零,至少比非零多得多,那么你可以利用 Matlab 的稀疏矩阵函数。它们在不存储整个矩阵的情况下工作,基本上只对非零数进行操作。
如果你很懒,但你有一台非常好的机器(比如1TB的SSD(,你可以考虑在linux中增加分页文件的大小(或在Windows上类似(。这基本上意味着磁盘中有一个空间,您可以允许计算机像RAM内存一样使用。虽然内存不会崩溃,但您需要执行的操作将花费非常长的时间,因此请考虑从较小的矩阵开始来衡量执行时间,该时间应随着向量长度的立方体而增长。
因此,举个例子,请尝试回顾您遇到的问题。