从整数向量构造对角矩阵:函数特征

时间:2013-06-28 09:48:16

标签: c++ eigen

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

1 0 0
0 2 0
0 0 3

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

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

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:10)

根据this part of the documentation,你有很多选择,最简单的选择是

auto mat = vec.asDiagonal();

答案 1 :(得分:1)

除非你真的知道自己在做什么,否则你应该使用与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

答案 2 :(得分:0)

您也可以采用另一种方法,也可以设置超级/次对角线

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

请参见Eigen Matrix Diagonal() reference(也有示例)