gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 17:56:18 28 4
gpt4 key购买 nike

设 S 是一个对称的 n x n 矩阵,A 是一个 m x n 矩阵。

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

B 也是一个对称矩阵。

使用 tuxfamily Eigen 库第 3 版,什么是实现此计算的简洁高效的方法? (我所说的高效,主要是指 B 的元素的重复计算不会在对称性使它们变得不必要的情况下执行。)

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

该应用程序是一个卡尔曼滤波器,它在很大程度上取决于涉及(对称)协方差矩阵的操作,因此我想确保实现/设计正确。

谢谢!

最佳答案

这应该很简单。正如您自己所说,您可以通过 SelfAdjointView 让 Eigen 知道您的矩阵是对称矩阵这一事实。还有另一个 View ,即 TriangularView,您可以使用它来存储结果。根据reference如果您分配给 TriangularView,则只会评估 rhs 的相关部分。所以

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

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

关于c++ - Eigen:评估 A*S*A_transpose 并将结果存储在对称矩阵中的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13215467/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com