如何在 Eigen 中获取系数矩阵?

How to get a coefficient matrix in Eigen?

好的,所以我想在 Eigen 中执行此操作:

float StartMatrix[7][7] = { { 1, 4, 6, 9, 3, 5, 8 }, { 2, 5, 3, 7, 4, 8, 2 }, { 3, 6, 6, 7, 0, 2, 4 }, 
                            { 2, 4, 3, 7, 4, 8, 2 }, { 2, 3, 3, 11, 4, 8, 1 }, { 2, 12, 3, 7, 0, 8, 2 },
                            { 2, 2, 3, 4, 4, 11, 2 } };

float TotalMatrix[7] = { 22, 15, 13, 26, 27, 33, 19 };

float CoMatrix[7][7] = { { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 },
                        { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0, 0, 0 }, 
                        { 0, 0, 0, 0, 0, 0, 0 } };

for (int row = 0; row < 7; row++) {
    for (int col = 0; col < 7; col++) {
        CoMatrix[row][col] = StartMatrix[row][col] / TotalMatrix[col];
    }

}

将每一行仅除以 TotalMatrix 中的列。然后我想从 Eigen 中的 CoMatrix 中减去单位矩阵并得到它的逆矩阵(只是想知道我为什么要这样做)。

问题是,我如何使用 Eigen 执行此操作,或者以某种方式将 CoMatrix 数组放入 Eigen 中的矩阵中,以便我可以用它做一些事情(比如求逆等)。

谢谢!

您在 Eigen 中的代码将如下所示(导入 Eigen 命名空间后,using namespace Eigen;):

MatrixXd StartMatrix(7, 7);
StartMatrix << 
    1, 4, 6, 9, 3, 5, 8, 2, 5, 3, 7, 4, 8, 2, 3, 6, 6, 7, 0, 2, 4,
    2, 4, 3, 7, 4, 8, 2, 2, 3, 3, 11, 4, 8, 1, 2, 12, 3, 7, 0, 8, 2,
    2, 2, 3, 4, 4, 11, 2;

VectorXd TotalMatrix(7);
TotalMatrix << 22, 15, 13, 26, 27, 33, 19;

MatrixXd CoMatrix = MatrixXd::Zero(StartMatrix.rows(), StartMatrix.cols());

CoMatrix = StartMatrix.array() / (TotalMatrix.replicate(1,StartMatrix.cols())).array();

您可以继续用

减去单位矩阵
CoMatrix -= MatrixXd::Identity(CoMatrix.rows(), CoMatrix.cols());

或将其与前面的表达式合并为:

CoMatrix = (StartMatrix.array() / (TotalMatrix.replicate(1, StartMatrix.cols())).array()).matrix()
    - MatrixXd::Identity(CoMatrix.rows(), CoMatrix.cols());