Мы составили систему из 3 линейных уравнений с 3 неизвестными, решили её, получив вектор Родрига, и затем преобразовали его в кватернион. Но авторы предлагали составить матрицу 4х4, и найти собственный вектор, соответствующий МАКСИМАЛЬНОМУ собственному значению. Выглядит "посолиднее" - может, именно так и надо поступать? А мы пошли по упрощённому пути и получили ошибку в 0,59°. Вдруг дело не в зашумлённых входных данных, а именно в применённом методе, который не смог этот шум надёжно отфильтровать?
Давайте проверим...
Напомню, в нашей модельной задаче был набор из 8 "эталонных", отцентрированных векторов r'k (их сумма даст ноль):
Хочется найти такой поворот, который наилучшим образом переведёт r'k в m'k.
1. Посчитать матрицу B:
Для нашего примера получаем следующую матрицу:
Своеобразно... Один ОЧЕНЬ БОЛЬШОЙ коэффициент b21 и два просто БОЛЬШИХ: b12 и b33, остальное - мелочь пузатая.
2. Превращаем матрицу B в вектор Z и матрицу Дэвенпорта K:
В данном случае получается:
(решили числа округлить - когда коэффициент в сотню тысяч, можно уже без десятых долей обойтись)
3. Находим максимальное собственное значение матрицы Дэвенпорта и соответствующий собственный вектор M.
На самом деле, задача не настолько сурова, как кажется на первый взгляд. У матрицы Дэвенпорта важная особенность, она обладает нулевым следом! Это означает, что в характеристическом уравнении коэффициент при λ3 равен нулю. Дальнейшие изыскания, проведённые [здесь], показывают, что коэффициент при λ2 ВСЕГДА будет отрицательным, и это всё позволяет найти максимальное собственное значение не так тяжело, как "в общем случае".
Но поскольку мы пока не собираемся исполнять этот алгоритм "в железе", то не будем мучаться и снова напряжём WolframAlpha:
Как и должно быть в случае симметричной матрицы, все 4 собственных значения действительные, самое большое - первое. Можно увидеть, что WolframAlpha при построении собственных векторов просто делает последнее значение единичным, а все остальные уже выражаются однозначно.
4. Нормируем собственный вектор на единичную длину, и ещё домножим на -1, чтобы проще было сравнивать:
(индекс d указывает, что по методу Дэвенпорта)
В целом похож. Напомним, линейный метод Мортари-Маркли дал такой кватернион:
Расстояние между ними ( метрика) составляет 0,069°. Поворот, вычисленный по методу Мортари-Маркли, отличался от истинного на 0,59°. Наконец, поворот, вычисленный по методу Дэвенпорта, отличается на 0,52°, т.е всё-таки ошибка вышла на 11% меньше.
Результат немного неожиданный: я думал, что эти два метода вообще дадут практически идентичные кватернионы, но нет. И в этом конкретном примере метод Дэвенпорта дал ошибку на 11% меньше. Полагаю, что это anecdotal evidence: если поиграться подольше, то окажется: иногда один чуть точнее, иногда другой, тут уж как повезёт. По крайней мере, в статье Мортари-Маркли получается именно так.
Может, как-нибудь ещё с этим делом поковыряюсь, но пока моя точка зрения не изменилась: на практике вполне можно применять метод Мортари-Маркли, он простой до безобразия :) А в той статье использовали Дэвенпорта по простой причине, статья 1987 года (а отдана в редакцию и вовсе в 1986), а метод Мортари-Маркли появился в 2007 году!
PS Впрочем, ещё одну вещь надо проверить: не ухудшает ли работу метода Мортари-Маркли тот факт, что эталонный и измеренный векторы имеют разную длину? Что Дэвенпорту не мешают - никаких сомнений, это видно из структуры матрицы B (см. Дэвенпорт берёт след), где весовой коэффициент можно было бы внести в длину векторов, т.е "чем точнее мы знаем вектор - тем длиннее его сделаем". И пока речь шла о направлениях, т.е единичных векторах, всё хорошо. Но тут-то из-за ошибок измерения и длина может оказываться различной...