我正在进行方阵A的降维。我现在的问题是我有计算13000 x 13000矩阵A的eigvalue分解的问题,即[v d]=eigs(A)
。因为它是一个稀疏矩阵,我使用4GB RAM得到“内存不足错误”。我确信这不是我的PC的问题,因为运行eigs
命令时内存没有用完。我在网上看到的帮助与ARPACK有关。我检查了推荐的网站,但那里有很多文件,不知道下载哪个。另外,我不明白如何在MATLAB中使用它。另一个帮助说使用数值方法,但我不知道使用哪个特定方法。欢迎任何解决方案。
Error in ==> eigs>ishermitian at 1535
tf = isequal(A,A');
Error in ==> eigs>checkInputs at 479
issymA = ishermitian(A);
Error in ==> eigs at 96
[A,Amatrix,isrealprob,issymA,n,B,classAB,k,eigs_sigma,whch, ...
Error in ==> labcomp at 20
[vector lambda] = eigs(A)
我可以翻译这些错误以及如何纠正错误吗?
答案 0 :(得分:3)
你没有看到内存耗尽的原因是它没有用完--Matlab无法分配所需的内存量。
尽管13000 x 13000双精度数组(Matlab中的默认数据类型)大约为1.25 GB,但这并不意味着4Gb的ram就足够了--Matlab需要1.25Gb的连续内存,否则它将无法成功分配您的矩阵。您可以在这里阅读有关Matlab内存问题的更多信息:http://www.mathworks.com/support/tech-notes/1100/1106.html
您可以尝试使用单一精度作为第一步:
[v d]=eigs(single(A));
你说
另一个帮助说使用数值方法
如果您是在计算机上进行的,那么它的定义就是数字。
如果你不想(或不能由于内存限制)在Matlab中做到这一点,你可以寻找线性代数库(ARPACK只是其中之一)并在Matlab之外完成计算。 / p>
答案 1 :(得分:0)
首先,如果A是稀疏的,单个(A)不会起作用。单稀疏矩阵未在MATLAB中实现,请参阅注释:
parseUnsignedLong
对db.tbl
.GroupBy(a => a.ID)
.Select(c => new {
CompanyName = c.First().CustomerName,
CustomerId = (int) c.Key,
TotalQuotes = c.Count()
});
的调用可能会失败,因为您无法存储矩阵的两个副本(A和A')。通过评论该行并将ishermitian
设置为issymA
或true
来取消此问题,具体取决于您的矩阵是否为Hermitian。
如果您发现false
内的内存存在更多问题,请尝试通过减少解决方案eigs
或减少基础的最大大小来减少其内存素材(选项eigs(A,1)
) ,默认情况下是问解决方案数量的两倍:
p