0

我正在对方阵 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) 

请问我可以翻译这些错误以及如何更正吗?

4

2 回答 2

3

您看不到内存用完的原因是它没有用完 - Matlab 无法分配所需的内存量。

虽然 13000 x 13000 双精度数组(Matlab 中的默认数据类型)约为 1.25 GB,但这并不意味着 4Gb 的内存就足够了 - Matlab 需要 1.25Gb 的连续内存,否则它不会成功分配你的矩阵。您可以在此处阅读有关 Matlab 内存问题的更多信息:http: //www.mathworks.com/support/tech-notes/1100/1106.html

您可以作为第一步尝试使用单精度:

[v d]=eigs(single(A));

你说

另一个帮助说使用数值方法

如果您是在计算机上执行此操作,则根据定义它是数字的。

如果您不想(或由于内存限制而不能)在 Matlab 中执行此操作,您可以寻找一个线性代数库(ARPACK 只是其中之一)并在 Matlab 之外完成计算。

于 2011-07-11T11:14:03.357 回答
0

首先,如果 A 是稀疏的,则 single(A) 将不起作用。MATLAB 中未实现单个稀疏矩阵,请参阅注释: 如何在 mex 文件中创建单个浮点稀疏矩阵

调用ishermitian可能会失败,因为您无法存储矩阵的两个副本(A 和 A')。根据您的矩阵是否为 Hermitian,通过注释掉该行并将其设置issymAtrueor来绕过此问题。false

如果您发现内部内存有更多问题eigs,请尝试通过减少其内存占用量来减少其要求的解决方案,eigs(A,1)或减少基础的最大大小(选项p),默认情况下是所要求解决方案数量的两倍:

 opts.p = 3
 [x,d] = eigs(A,2,'LM',opts)
于 2016-11-16T16:35:22.260 回答