有没有实现块 Krylov 子空间方法的库?

计算科学 克雷洛夫法
2021-12-05 06:21:21

问题

是否有实现块 Krylov 子空间方法的库?(我无法从简单的 Google 搜索中找到任何内容。)

背景

现在,我正在使用一个解决多个系统形式的代码

Axi=bi,

在哪里An经过n,i=1,,m,一般来说,nm(n至少是 10 倍以上m,并且可能比m)。此外,A足够大,迭代方法更可取。

目前,代码解决了Axi=bi使用给定的预条件子对每个单独的右侧使用 Krylov 子空间方法,这种方法似乎工作得很好。(代码还会重新计算预处理器,这是不必要的。)

为了加快代码速度,似乎值得考虑解决

AX=B

相反,在哪里B=[b1b2bm]是一个n经过m矩阵收集所有bi, 和X也是一个n经过m矩阵收集xi.

我想尝试解决AX=B使用块 Krylov 子空间方法(使用与以前相同的预处理器)来查看它是否优于当前的求解方法Axi=bi并循环i. 解决方案既可能也不太可能Axi=bi然后可以用作系统的猜测Axj=bj为了ij; 我不希望各种系统之间存在关系。

3个回答

经过几个小时的搜索,这至少是部分答案:

Trilinos 的Belos包中包含一个块 Krylov 子空间方法的实现,其中包含:

  • 块CG
  • 阻止 GMRES
  • 阻止灵活的 GMRES
  • Block GCRODR(块回收GMRES)

据说,其中一些方法的 MATLAB 实现是存在的,但我还没有遇到过。

相当老的帖子,但我发现了这个 MATLAB 实现,我还没有尝试过 https://github.com/rowanc1/blockIterativeSolvers

看看 DUNE(分布式和统一软件环境)。

我从未特别使用过这些方法,但我认为它们是在沙丘求解器框架 ISTL 中实现的:

沙丘项目