对于求解大型稀疏线性系统的 Krylov 子空间方法,我们首先需要生成一个子空间Km = span{v,Av,...A^{m-1}v}
,这确实是一个将线性独立基转换为正交基的过程:
其中是上 Hessenberg 矩阵,即有大约非零条目。因此,当我们在 中编码时,我们首先需要,所以实际上,我们需要存储所有项,包括零项。但是在很多书中,作者都说矩阵的存储量大约是。我不明白作者为什么这么说?因为代码确实存储个条目,即使matlab
H = zeros(m,m)
H = zeros(m,m)
零个条目。有什么建议?
如何理解 Krylov 子空间矩阵的 Hessenberg 矩阵的存储?
计算科学
matlab
线性求解器
稀疏矩阵
克雷洛夫法
2021-11-29 19:15:55
2个回答
您的观点是正确的,Matlab 确实存储了零。正如@rchilton1980 所指出的,您在此处指出的这种特殊的非优化并不太有害,因为 Krylov 方法中的大部分存储是矩阵 V,而不是 H。但这只是一般现象的一个实例. 这只是 Matlab 在简单性和效率之间进行权衡的选择。
Matlab 通常不关心这些优化。存储的紧凑表示。或 LU 分解,为简单起见,返回两个单独的矩阵 L 和 U。分解是在新矩阵中计算的,而不是就地覆盖输入。
如果您关心该级别的效率,您将需要直接使用 Lapack 例程,或者切换到在这方面更好的 Julia。
在实践中,我认为的特定因素不值得追求。考虑到 gmres 应用于一个大问题(),那个小的 Hessenberg 投影存储与搜索向量本身)相形见绌。您被迫重新启动,因为太大,而不是因为。