C++ 计算特征值时的误差
我试图找到对称矩阵的特征值,如下所示:-C++ 计算特征值时的误差,c++,eigenvalue,opencv3.2,C++,Eigenvalue,Opencv3.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); t.at<float>
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);
t.at<float>(0, 0) = 4;
t.at<float>(0, 1) = 2;
t.at<float>(1, 0) = 1;
t.at<float>(1, 1) = 3;
matt(2,2,CV_32F);
t、 at(0,0)=1;
t、 at(0,1)=0;
t、 at(1,0)=0;
t、 at(1,1)=128;
Mat eigVal,eigVec;
特征值(t,eigVal,eigVec);
当我打印这个矩阵的特征值时,它给了我正确的答案
cout << eigVal.at<float>(0) << "," << eigVal.at<float>(1) << "\n";
couteigen
仅适用于对称矩阵(主对角线两侧值相等的矩阵)。对于非对称矩阵,您需要特征非对称
:
#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