如何使用matlab计算大型稀疏矩阵的所有特征值?

计算科学 matlab 矩阵 稀疏矩阵 特征值 谱法
2021-12-09 17:29:45

在 matlab 中,有 2 个命令名为“eig”,用于完整矩阵,“eigs”用于稀疏矩阵,用于计算矩阵的特征值。eig (A)计算完整矩阵的所有特征值,而eigs(A)计算矩阵A的 6 个最大幅度特征值如果我们要计算一个稀疏矩阵的所有特征值,那么我们必须将矩阵转换为全类型,即A时使用eig(full(A))是稀疏的。但这会因为 CPU 内存而失败。我的问题是,如果我想计算一个大型稀疏矩阵的所有特征值,比如说(矩阵大小为 10000)。如何实施?我知道我们不应该计算大型稀疏矩阵的所有特征值。但有时,在 Krylove 子空间迭代方法中,我们需要绘制预处理矩阵的谱分布来研究收敛速度。所以我需要绘制光谱分布怎么做?非常感谢。

下面是我的随机示例,但失败了。该矩阵来自使用二维中心差的泊松方程:

clc;clear;
n=100;
A = gallery('poisson',n);% system size is n*n
R = ichol(A);
P = R'*R;%  construct preconditioner
%   consider the eigenvalue distribution of  preconditioned matrix inv(P)*A
a = eig(full(A),full(P));
plot(real(a),imag(a))
1个回答

“获取更多 RAM”可能是您的最佳选择之一。:) 现在价格相当低,而且它是您可以赠送计算机的最佳升级之一。10k x 10k 是临界值,但在现代计算机上仍然可行:该矩阵需要104×104×8字节,即 760 MiB。在我的笔记本电脑上,代码运行没有问题。

另一种选择是使用更小的代码运行您的代码n. 看起来您正在运行该计算以了解您的预调节器是如何工作的,而不是数字。您可能可以通过 5k x 5k 矩阵或 2k x 2k 矩阵获得相同的见解。这些可能会适合您的记忆。