最大的Matrix Matlab Linprog可以支持

时间:2014-03-04 02:35:46

标签: matlab

我想使用MATLAB linprog来解决问题,我通过一个更小,更简单的例子来检查它。

但是我想知道MATLAB是否可以支持我的实际问题,可能有一个300*300*300*300矩阵......


也许我应该提出确切的问题。有一个网络节点的有向图,我想在一些约束条件下获得边缘容量的最低利用率。设{4}为边数,m为节点数。有n个变量和mn²个约束。不幸的是,nm²可能会达到300 ...

我想用MATLAB n来解决它。如上所述,我担心MATLAB不能支持它......最后矩阵必须是稀疏的,有时可以简化它吗?

3 个答案:

答案 0 :(得分:1)

首先:300*300*300*300数组不是矩阵,而是张量(或简称数组)。因此,您不能在其上使用矩阵/向量代数,因为没有为维度大于2的数组定义,如果没有某种解释步骤,您当然不能在linprog中使用它。

第二:如果我将300⁴解释为表示矩阵中元素的数量(而不是大小),那实际上取决于MATLAB(或任何其他软件)是否可以支持那。

正如本已经回答的那样,如果您的矩阵已满,那么答案可能是300^4 doubles将占用近65GB的内存,因此任何软件包都不太可能从内存中处理所有内容(除非你实际拥有> 65 GB的内存)。您可以使用blockproc - 类型方案,其中您只在内存中加载矩阵的一部分,而将其余部分保留在硬盘上,但这非常慢。此外,如果您的矩阵 很大,那么您完全有可能忽略一些可以简化问题的方法。

如果矩阵是稀疏(即包含大量零),那么可能。看看MATLAB的sparse命令。

那么,你的问题究竟是什么?这个庞大的矩阵来自哪里?也许我或其他人看到了一种方法,可以将该矩阵简化为更易于管理的东西。

答案 1 :(得分:1)

在我的系统上,安装了24GByte RAM,运行Matlab R2013a,memory给了我:

Maximum possible array:     44031 MB (4.617e+10 bytes) *
Memory available for all arrays:     44031 MB (4.617e+10 bytes) *
Memory used by MATLAB:      1029 MB (1.079e+09 bytes)
Physical Memory (RAM):     24574 MB (2.577e+10 bytes)

*  Limited by System Memory (physical + swap file) available.

在64位版本的Matlab上,如果你有足够的RAM,应该至少可以创建一个与你建议的一样大的完整矩阵,但是linprog是否可以对它做任何有用的事情在现实的时间里完全是另一个问题。

除了调查sparse矩阵的使用之外,您可能会考虑使用single精度:将内存使用量减少一半。

答案 2 :(得分:0)

你可以试试:X=zeros( 300*300*300*300 ) 在我的系统上它给了我一个非常明确的声明:

>> X=zeros( 300*300*300*300 )
Error using zeros
Maximum variable size allowed by the program is exceeded.

因为zeros是一个内置函数,它只用零填充给定大小的数组,你可以认为处理这样​​的数组是不可能的

您也可以使用memory命令

>> memory
Maximum possible array:     21549 MB (2.260e+10 bytes) *
Memory available for all arrays:     21549 MB (2.260e+10 bytes) *
Memory used by MATLAB:       685 MB (7.180e+08 bytes)
Physical Memory (RAM):     12279 MB (1.288e+10 bytes)

*  Limited by System Memory (physical + swap file) available.

>> 2.278e+10 /8   
%max bytes avail for arrays divided by 8 bytes for double-precision real values

ans =
2.8475e+09

>> 300*300*300*300

ans =
8.1000e+09

这意味着我甚至没有内存来存储这样的数组。

虽然这可能无法直接回答您的问题,但仍可能会给您一些见解。