Нахождение собственных векторов ковариационной матрицы для создания трехмерной ограничивающей сферы

В настоящее время я пишу функцию для поиска "точной" ограничивающей сферы для набора точек в 3D пространство. Думаю, у меня есть хорошее представление о процессе, но я застрял.

Вот ' А) Точки в трехмерном пространстве B) Ковариационная матрица 3x3 хранится в матричном классе 4x4 (на которую ссылаются ячейки m0, m1, m2, m3, m4, ect; вместо строк и столбцов)

Я нашел 3 собственных значения для ковариационной матрицы точек , и я настроил функцию для преобразования матрицы в сокращенную форму эшелона строк (rref) с помощью исключения Гаусса.

Я протестировал обе эти функции на фигурах в примерах, которые я нашел в Интернете, и они, похоже, работать правильно.

Следующий шаг - найти собственные векторы, используя уравнение: (M - λ * I) * V

... где M - ковариационная матрица, λ - одно из собственных значений, I - единичная матрица, а V - собственный вектор.

Однако I не похоже, чтобы правильно построить матрицу 4x3 перед ее rref'ом, поскольку крайний правый столбец, в котором должны быть вычислены компоненты собственного вектора, равен 0 до и после запуска rref. Я понимаю, почему они равны нулю после (без каких-либо констант, простейшее решение линейной системы уравнений - все коэффициенты, равные нулю), но я не знаю, что туда положить.

Вот функция пока :

Vect eigenVector(const Matrix &M, const float eval) {
   Matrix A = Matrix(M);
   A -= Matrix(IDENTITY)*eval;
   A.rref();
   return Vect(A[m3],A[m7],A[m11]);
}

Ковариационная матрица 3x3 передается как M, а собственное значение - как eval. Матрица (IDENTITY) возвращает единичную матрицу. m3, m7 и m11 соответствуют крайнему правому столбцу матрицы 4x3.

Вот пример матрицы 3x3 (хранящейся в классе матриц 4x4) I ' http://elonen.iki.fi/code/misc-notes/python-gaussj/index.html

Как должна выглядеть матрица, которую я передаю в rref (), чтобы получить собственный вектор?

Спасибо

1
задан Dan 17 October 2010 в 13:47
поделиться