特征:评估A * S * A_transpose并将结果存储在对称矩阵中的最佳方法

时间:2012-11-04 02:25:12

标签: c++ linear-algebra eigen

设S是对称的n×n矩阵,A是m×n矩阵。

给定:B = A * S * A_transpose(其中“*”表示矩阵乘积运算)

B也将是一个对称矩阵。

使用tuxfamily Eigen库,版本3,什么是实现此计算的干净有效的方法? (通过有效,我主要是指在对称性不必要的情况下不执行B元素的重复计算。)

我猜它会使用SelfAdjointView,但我搜索了高低,并没有找到一个干净的例子。

该应用程序是一个卡尔曼滤波器,它严重依赖于涉及(对称)协方差矩阵的运算,因此我希望确保实现/设计正确。

谢谢!

1 个答案:

答案 0 :(得分:5)

这应该很简单。正如您自己所说,您可以通过SelfAdjointView使Eigen意识到矩阵是对称矩阵。还有另一个视图,即TriangularView,您可以使用它来存储结果。根据{{​​3}},如果指定给TriangularView,则仅评估rhs的相关部分。所以

B.triangularView<Upper>() = A * S.selfadjointView<Upper>() * A.transpose();

会将结果存储在B的上三角形中。然后,您可以在任何进一步的计算中使用B.selfadjointView<Upper>。我不确定这在所需操作方面是否是最佳的,您可能需要进行一些基准测试来验证。