arr*_*sea 8 c++ linear-algebra eigen
设S是对称nxn矩阵,A是amxn矩阵.
给定:B = A*S*A_transpose(其中"*"表示矩阵乘积运算)
B也将是对称矩阵.
使用tuxfamily Eigen库,版本3,什么是实现此计算的干净有效的方法?(通过有效,我主要是指在对称性不必要的情况下,不执行B元素的重复计算.)
我猜它会使用SelfAdjointView,但我搜索了高低,没有找到一个干净的例子.
该应用程序是一个卡尔曼滤波器,它严重依赖于涉及(对称)协方差矩阵的运算,因此我希望确保实现/设计正确.
谢谢!
这应该很简单.正如您自己所说,您可以通过SelfAdjointView使Eigen意识到矩阵是对称矩阵.还有另一个视图,即TriangularView,您可以使用它来存储结果.根据参考文献,如果您指定TriangularView,则仅评估rhs的相关部分.所以
B.triangularView<Upper>() = A * S.selfadjointView<Upper>() * A.transpose();
Run Code Online (Sandbox Code Playgroud)
将结果存储在B的上三角形中.然后可以B.selfadjointView<Upper>在任何进一步的计算中使用.我不确定这在所需操作方面是否是最佳的,您可能需要进行一些基准测试来验证.