对称矩阵计算 (Eigen & C++)

计算科学 线性代数 C++ 本征 对称
2021-12-25 13:42:50

我想通过以下方式从向量 b 计算对称矩阵 A:A = b * b'。

Eigen 库是否自动考虑到它不需要进行所有计算来获得 A(因为重复大多数矩阵条目的对称性)?

如果没有,我可以利用对称性并编写自己的计算函数。

2个回答

这是实际存储矩阵没有意义的典型情况。相反,将矩阵视为一个运算符,其中

  • 如果你需要乘以它,即形成y=Ax, 你做y=b(bx)反而

  • 如果你需要访问一个元素Aij,而是将其计算为bibj.

换句话说,知道什么A是,您不应该将其存储为矩阵,而应仅将其存储为单个向量。你不能指望图书馆为你做这些事情,但你应该自己做。

Eigen 库无法先验地“知道”乘积b*b'是否会产生对称矩阵,因此您可以编写自己的方法(尽管如果不使用大型矩阵,它会有些无用)

但是,在一些线性求解器中使用了一个名为 的例程isSymmetric来检查输入矩阵是否对称,但当然,这不能满足您的需要。