【问题标题】:Eigenvalue and Matrix array特征值和矩阵数组
【发布时间】:2016-06-15 03:45:27
【问题描述】:

我正在尝试为matrix[7][7] 计算eigenvalue,我的代码是:

for (i = 0; i<M; i++)               //matrix + identity
      {
        for (j = 0; j<M; j++)
        {

            MI[i][j] = MX[i][j] + a[i][j];
            cout << setw(7) << MI[i][j] << " ";

            MatrixXd W;
            W = MI[i][j];
            SelfAdjointEigenSolver <MatrixXd> eigensolver (W);
            cout << "The eigenvalues of A are:\n" << eigensolver.eigenvalues() << endl;
        }
        cout << endl;

    }

我的问题是我通过定义为matrixXd W 来调用我的矩阵是否正确?

我最终在W = MI[i][j] 行出现错误:

没有操作数“=”匹配这个操作数&操作数类型是:MatrixXd=double

【问题讨论】:

    标签: c++ arrays matrix eigenvalue


    【解决方案1】:

    我猜,您想使用特征库来计算矩阵的特征值。 从您的代码中看不太清楚,但有些事情应该立即修复。

    1. MatrixXd W 没问题。尽管您没有指定尺寸。我猜,你可以将其调整为 M x M。

      MatrixXd W
      W.resize(M,M)
      
    2. 你的行 W=MI[i][J] 很奇怪。我猜,你的意思是

      W(i,j)=MI[i][j]
      
    3. 不清楚,如果你真的想计算 M^2 个不同矩阵的特征值。在两个 for 循环中使用 egiensolver 和矩阵声明 - 这正是您正在做的事情。如果这不是您的意图(这很可能),请考虑在 for 循环之前移动矩阵的声明。使用循环填充矩阵。并在两个 for 循环之后调用 eigensolver。这将计算一个矩阵的特征值。

    4. 此外,您可以开始将所有代码转换为使用基于 Eigen 库的矩阵。 (如果代码库不是太大)。

    Eigen 网站上有大量示例展示了如何进行基本操作。这两个应该可以满足您的需求。

    http://eigen.tuxfamily.org/dox/group__TutorialMatrixClass.html http://eigen.tuxfamily.org/dox/classEigen_1_1EigenSolver.html

    【讨论】:

    • 感谢 Anton 的快速回复,没有 3 有意义,因为我正在寻找特征值,如果我有 3x3 矩阵,那么我的特征值应该是 3,不需要循环,对吗?
    • 我认为您要么误解了我的陈述,要么误解了特征值的定义。请看一下矩阵的特征值是什么意思。一个 3 x 3 矩阵有 3 个特征值(计算多重性)。但是使用 Eigen 库,您无需进行 3*3=9 特征值分解即可找到它们。
    猜你喜欢
    • 2012-08-08
    • 2018-10-31
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-04-27
    • 1970-01-01
    • 2011-09-29
    • 2022-01-23
    相关资源
    最近更新 更多