【问题标题】:error in computing eigen values计算特征值的错误
【发布时间】:2018-08-04 04:58:50
【问题描述】:

我正在尝试查找对称矩阵的特征值,如下所示:-

    Mat t(2, 2, CV_32F); 
    t.at<float>(0, 0) = 1;
    t.at<float>(0, 1) = 0;
    t.at<float>(1, 0) = 0;
    t.at<float>(1, 1) = 128;

    Mat eigVal,eigVec;
    eigen(t,eigVal,eigVec);

当我打印这个矩阵的特征值时,它给了我正确的答案。

cout << eigVal.at<float>(0) << "," << eigVal.at<float>(1) << "\n";

我得到的输出是 128,1。但是当我如下改变我的矩阵时:-

t.at<float>(0, 0) = 4;
t.at<float>(0, 1) = 2;
t.at<float>(1, 0) = 1;
t.at<float>(1, 1) = 3;

我没有得到正确的回应。我期望的输出是 5,2。但相反,我得到的输出为 5.56155 和 1.43845。 谁能告诉我哪里做错了

【问题讨论】:

    标签: c++ eigenvalue opencv3.2


    【解决方案1】:

    eigen 仅适用于对称矩阵(主对角线两侧值相等的矩阵)。对于非对称矩阵,您需要 eigenNonSymmetric

    #include <stdio.h>
    #include <opencv2/opencv.hpp>
    
    using namespace cv;
    using namespace std;
    
    int main(int argc, char *argv[])
    {
      Mat t(2, 2, CV_32F);
      t.at<float>(0, 0) = 4;
      t.at<float>(0, 1) = 2;
      t.at<float>(1, 0) = 1;
      t.at<float>(1, 1) = 3;
    
      Mat eigVal,eigVec;
      eigenNonSymmetric(t,eigVal,eigVec);
    
      cout << eigVal.at<float>(0) << "," << eigVal.at<float>(1) << "\n";
    
      return 0;
    }
    

    输出:

    5,2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多