卡尔曼滤波器的稀疏矩阵实现?

计算科学 线性代数 稀疏矩阵
2021-12-02 08:01:26

我有一个基于卡尔曼滤波器的建模代码,它是为近实时区域电离层映射应用程序开发的。该代码使用卡尔曼滤波器将来自不同传感器的数据同化为地图(由一组基函数描述)。

我正在尝试将其扩展到更大的区域和更多的传感器,但是由于涉及的大矩阵(数千行/列),卡尔曼滤波器的矩阵代数部分变得非常慢。我怀疑解决运行时问题的最佳方法是利用这些矩阵通常非常稀疏的事实,其中 80% 或更多的总元素为零。原因是每个传感器都有一个与映射系数联合估计的偏置参数。这在 Kalman H 矩阵中该传感器的列中显示为 1,对于每个其他传感器和映射系数,在列中显示为 0。有数百个传感器,每个传感器在每个时期贡献 8-10 个观测值,因此有很多零。

我可以看看使用稀疏算法实现卡尔曼滤波器的组件,特别是乘法和反演*,但我想知道是否有更好的方法可以以更适合矩阵的情况的不同形式重新转换卡尔曼滤波器疏?我知道我可以使用集成卡尔曼滤波器或类似的东西,但如果可能的话,我想保留纯线性卡尔曼滤波器的最优性;总数据量并不高,只是线性模型产生的大型稀疏矩阵。

在实现方面,这是在 IDL 中完成的,但是核心矩阵代数是通过调用外部优化的 LA 库(特别是 ATLAS)来完成的。

*我知道最佳卡尔曼滤波器实现避免反转,而是使用 UD 分解。我正在考虑尝试实现这样的东西,所以这可能是答案,但考虑到矩阵的稀疏性,我正在寻找是否有更好的解决方案。

4个回答

对于稀疏矩阵,通常情况下,虽然矩阵A稀疏,A1是稠密的。在这种情况下,Cholesky 或LU因式分解A更可能是稀疏的(特别是如果A重新排序以改进稀疏模式。)在大多数情况下,如果您想利用稀疏性并且对使用迭代算法解决涉及的系统不感兴趣A,那么你最好使用矩阵的一些分解而不是显式计算A1.

特别是对于卡尔曼滤波,而不是计算

Sk=(HkPk1,kHkT+Rk)1

您通常最好使用因式分解Sk1. 自从Sk是对称的并且应该是正定的,您可以使用 Cholesky 分解或LDLT分解来做到这一点。你告诉我们你的Hk矩阵是稀疏的,但你没有告诉我们任何关于是否Rk是稀疏的或其他结构化的,当然P可能非常密集。

集成卡尔曼滤波器 (EnKF) 和各种粒子滤波技术如此流行的一个原因是,对于具有极大状态向量的系统,传统的卡尔曼滤波变得非常困难。EnKF 可以有效地实现非常大的状态向量,如果Rk是对角线或接近对角线。在数据同化领域工作的人们已经深入处理了这些问题,因此我建议您通过阅读他们如何处理这些问题来开始您的研究。

我们有一个用于集成卡尔曼(和常规卡尔曼)滤波器的稳健算法。它非常适合稀疏矩阵和并行计算,因为它基于正交矩阵并且与平方根或 UD 算法有关。

很高兴能寄出论文

Thomas, SJ, J. Hacker 和 J. Anderson, (2009): 集成卡尔曼滤波器 Quart J. Royal Met 的稳健公式。社会学杂志,第 135 卷,第 507-521 页,

(出版商的 PDF 是免费的。)

很久以前,我有机会从事降维工作,以处理大集合中的数据。它背后的基本思想是,它通过几个步骤处理数据,以使大多数信息可以从中计算出来。

它对矩阵也很有效,并且被广泛使用。最好的部分是您甚至不需要对其进行编程,因为已经有可用的标准库。Matlab 和 Mathematica 等主要数学工具也直接支持此功能

有两种主要算法可以实现这一点 - 主成分分析和奇异值分解。

这些算法实际实现的是找到对您的阅读产生显着影响的数据。互联网上充斥着关于这些算法的信息。将向您展示 Apache 是如何做到的。

很抱歉暂时没有加入讨论 - 但我很乐意发布论文的摘要 - 但也很高兴讨论计算的组织方式与 EnKF 方法的标准 KF 不同的原因