本征:连接矩阵和向量

Eigen: Concatenating matrices and vectors

使用 Eigen C++ 库,我有一个 Matrix3f A、一个 Vector4f b 和一个 Vector4f c。我想从中创建一个 Matrix4f M。我希望 M 的顶部 3×3 角为 A,我希望 M 的最后一列为 b,我希望底行M 变为 c.

我知道如何通过简单地创建一个 Matrix4f 并单独分配每个元素来做到这一点。但是有没有Eigen支持的更优雅的方案呢?

这样算不算优雅?

#include <Eigen/Sparse>
#include <iostream>

using namespace Eigen;
using std::cout;
using std::endl;

int main(int argc, char *argv[])
{

    Matrix4f m = Matrix4f::Random();
    Matrix3f A = Matrix3f::Constant(0.1);
    Vector4f b = Vector4f::Constant(0.2), c = Vector4f::Constant(0.3);
    cout << m << endl << endl;
    cout << A << endl << endl;
    cout << b << endl << endl;
    cout << c << endl << endl;

    m.block(0, 0, 3, 3) = A;
    m.col(3) = b;
    m.row(3) = c;

    cout << m << endl << endl;

    return 0;
}

请注意,您的问题有点模棱两可,因为 (3,3) 位置将由 bc 之间的分配顺序决定。