ошибка в вычислении собственных значений

Я пытаюсь найти собственные значения для симметричной матрицы следующим образом:

    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.
Может кто-нибудь сказать мне, где я сделал ошибку

0

Решение

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
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]