有效的三角化S =三角(一)S=triag⁡(A);小号小号吨=一个一种吨SST=AAT

计算科学 线性代数
2021-11-26 02:21:34

我的应用程序中计算量最大的部分是矩阵的三角化,S=triag(A), 这样SST=AAT.

对于这个应用程序An×2(n+v), 在哪里n通常接近相同的值v.

目前,我通过 QR 分解求解,AT=QR

AAT=(RTQT)(QR)

=RTQTQR

=RTR

=SST

这给出了我想要的形式。

有没有更有效的方法来执行这个操作?即使是对 QR 的适度节省也将提供性能提升,因为这一操作占我总计算时间的 30%。


triag()函数是Divided Difference Filter的核心,类似于更常见的Unscented Kalman Filter该问题在介绍Cubature Kalman 滤波器的论文中明确提到。

简而言之,它基于非线性过程模型和状态协方差 Cholesky 因子计算四个“除差”矩阵。这四个矩阵水平连接,然后三角化——这形成了预测的状态协方差:

S(k+1|k)=triag([Sxx(2)Sxv(1)Sxx(2)Sxv(2)])

其中以上是上面计算的“除差”矩阵。然后直接使用预测的状态协方差 Cholesy 因子来生成预测测量值的“除差”矩阵。SpqnS(k+1|k)

预测测量值的三角化过程遵循类似的过程,但由于我的测量向量与我的状态向量相比较小,因此该计算(以及随后的卡尔曼增益/更新)方程不是计算密集型的(大约 4% 的过程时间)。

1个回答

如果AAT条件良好,那么您也许可以使用 Cholesky 分解AAT而不是使用 QR 分解。根据大小A这可能比计算 QR 分解要快得多A. 如果你告诉我们一些关于A我们可以解决这个问题。

然而,如果AAT条件很差,那么使用 Cholesky 分解可能不是一个好主意,因为 Cholesky 分解会不太准确。这将有助于了解有关条件数的信息AAT.

你还没有告诉我们你为什么要S以及在计算了这个因式分解后你用它做什么。很有可能有一种更有效的方法来解决更高层次的问题,而无需计算这个因式分解AAT. 但是,除非您提供更多关于您要完成的工作的背景信息,否则我们无法提出任何建议。换句话说,这个问题的一个好的答案将取决于你还没有提供的很多上下文。