计算特征值错误
error in computing eigen values
我试图找到对称矩阵的特征值,如下所示:-
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。
谁能告诉我哪里做错了
eigen
仅适用于对称矩阵(主对角线两侧的值相等的矩阵)。 non-symmetric 个矩阵需要 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
我试图找到对称矩阵的特征值,如下所示:-
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。 谁能告诉我哪里做错了
eigen
仅适用于对称矩阵(主对角线两侧的值相等的矩阵)。 non-symmetric 个矩阵需要 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