7

我有一个整数向量,我想构造一个对角矩阵,其中 vectos 的元素作为矩阵的对角元素。例如:如果向量是1 2 3对角矩阵,则为:

1 0 0
0 2 0
0 0 3

天真的方法就是迭代它并一个一个地设置元素。有没有其他直接的方法可以做到这一点eigen。同样在构建对角线之后,我想计算逆(这只是反转对角线条目)但似乎没有办法在库本身中也这样做(直接,这也将被优化)。

我在库中查找了对角矩阵eigen的文档,但似乎没有办法。如果我在阅读文档时遗漏了一些明显的东西,请指出。

任何帮助表示赞赏。

4

3 回答 3

13

根据文档的这一部分,您有很多选择,最简单的一个是

auto mat = vec.asDiagonal();
于 2013-06-28T10:22:49.037 回答
3

你应该对 Eigen 使用正确的类型,除非你真的知道你在做什么

//Create a 4x4 diagonal matrix from the vector [ 5 6 7 8 ]
Eigen::Vector4d vec;
vec << 5, 6, 7, 8;
Eigen::DiagonalMatrix<double, 4> mat = vec.asDiagonal();

使用 auto 是一个非常危险的斜坡,您通常不知道编译器使用什么作为类型,并且与 Eigen 相结合,这是难以找到的错误的常见来源之一(请参阅https://eigen.tuxfamily。 org/dox/TopicPitfalls.html

于 2017-01-03T14:42:53.260 回答
1

你也可以反过来做,这样你也可以设置超/下对角线

MatrixXd A = ...;
A.diagonal(0) = values_vector; //for 'main' diagonal
A.diagonal(1) = other_values; //for 1st super-diagonal

请参阅Eigen Matrix Diagonal() 参考(也有一个示例)

于 2019-08-24T20:27:17.353 回答