更新密集 QR 和 Cholesky 分解的代码

计算科学 线性代数 图书馆 拉帕克 矩阵分解
2021-12-16 16:05:58

我正在寻找一些可用于生产的代码来更新密集的 QR 和/或 Cholesky 分解(通过添加/删除行和列或进行小级别更新——是的,我需要所有这些情况)。

我已经完成了我的谷歌文献研究,但我发现很少:

  • Matlab 已经涵盖了这个,但不幸的是,这是针对 C++ 项目的,因此与它交互并不容易。我宁愿拥有 C/C++ 或 Fortan,尤其是“传统”LAPACK 风格的代码。
  • 据我所知,LAPACK 什么都没有。LINPACK(LAPACK 的前身)中有一些东西,但据我所知,它至少在过去 30 年没有更新。
  • Craig Lucas 为这些子任务之一提供了一些代码(仅为 QR 分解添加/删除列), Daniel Kressner 为仅向 QR 分解添加行提供了一些代码。它们都仅限于我需要的子任务之一,并且引用 Kressner 的页面,

它没有经过彻底的测试,应该被理解为研究代码。

因此,似乎有很多代码可以执行类似相关的任务,但并不完全针对这个问题,这似乎令人惊讶。

我是否忽略了一些明显的选择?有图书馆可以做吗?

1个回答

您可以使用 Octave 中链接的包qrupdate

它在 Fortran 中......但它应该是自包含的。如果您需要将其链接到 C++ 项目,您可以查看 Octave源代码文件floatQR.cc