在 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))