В настоящее время я пишу функцию для поиска "точной" ограничивающей сферы для набора точек в 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 (), чтобы получить собственный вектор?
Спасибо