如何理解 Krylov 子空间矩阵的 Hessenberg 矩阵的存储?

计算科学 matlab 线性求解器 稀疏矩阵 克雷洛夫法
2021-11-29 19:15:55

对于求解大型稀疏线性系统的 Krylov 子空间方法,我们首先需要生成一个子空间Km = span{v,Av,...A^{m-1}v},这确实是一个将线性独立基转换为正交基的过程: 其中是上 Hessenberg 矩阵,即有大约非零条目。因此,当我们在 中编码时,我们首先需要,所以实际上,我们需要存储所有项,包括零项。但是在很多书中,作者都​​说矩阵的存储量大约是我不明白作者为什么这么说?因为代码确实存储个条目,即使

VmAVm=Hm,
Hmm2/2matlabH = zeros(m,m)m2Hmm2/2H = zeros(m,m)m2m2/2零个条目。有什么建议?

2个回答

您的观点是正确的,Matlab 确实存储了零。正如@rchilton1980 所指出的,您在此处指出的这种特殊的非优化并不太有害,因为 Krylov 方法中的大部分存储是矩阵 V,而不是 H。但这只是一般现象的一个实例. 这只是 Matlab 在简单性和效率之间进行权衡的选择。

Matlab 通常不关心这些优化。存储的紧凑表示。或 LU 分解,为简单起见,返回两个单独的矩阵 L 和 U。分解是在新矩阵中计算的,而不是就地覆盖输入。n2/2

如果您关心该级别的效率,您将需要直接使用 Lapack 例程,或者切换到在这方面更好的 Julia。

在实践中,我认为的特定因素不值得追求。考虑到 gmres 应用于一个大问题(),那个小的 Hessenberg 投影存储与搜索向量本身)相形见绌。您被迫重新启动,因为太大,而不是因为2n>>mm2mnVmVmHm