如何在本征中得到系数矩阵

How to get a coefficient matrix in Eigen?

本文关键字:      更新时间:2023-10-16

好的,我想在本例中执行这个操作:

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执行此操作,或者以某种方式将commatrix数组转换为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());
相关文章:
  • 没有找到相关文章