2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Унитарная матрица преобразования в 3D
Сообщение24.01.2021, 23:07 


11/08/18
363
Добрый день,

пусть у меня имеется обычное трехмерное пространство и в нем задан набор точек $X = [x_1, \dots, x_k] \in {\mathbb R}^{3 \times k}, ~ 3 \le \le 4$, которые посредством матрицы трансформации и вектора линейного переноса переводятся в $Y = [y_1, \dots, y_k] \in {\mathbb R}^{3 \times k}$.

Запишем такую трансформацию в виде $A X + v u^T = Y$, $A \in {\mathbb R}^{3 \times 3}$, $v \in {\mathbb R}^3$, $u$ - вектор, состоящий из $k$ единиц.

В общем случае, чтобы найти $A$ и $v$ нам необходимо иметь хотя бы четыре точки ($k=4$), тогда, решая линейную систему $$[X^T, u] [A, v]^T = Y^T$$ с тремя правыми частями мы получаем искомые $[A, v]^T$.

В моем же случае, есть два неприятных нюанса:

1. $X$ и $Y$ заданы с некоторой погрешностью.
2. мне необходимо получить $A$ унитарной, более того, без инверсий.

Понимая, что унитарная $A$ задана только тремя степенями свободы, и имея дополнительно три степени свободы от вектора перемещения $v$, хочется решить эту задачу для $k=3$, но, что-то подсказывает мне, что тут будут какие-то неоднозначности.

Также, если таки $k=4$ и $X$ и $Y$ заданы с некоторой погрешностью, хочется как-то это регуляризовать, чтобы затянуть $A$ в подкласс унитарных.

Скажите, пожалуйста,

1. есть ли такое решение для $k=3$, и, если есть, наставьте, пожалуйста, на путь истинный,
2. если нет, то как для $k>3$ правильнее регуляризовать с учетом унитарности $A$?

Спасибо!

 Профиль  
                  
 
 Re: Унитарная матрица преобразования в 3D
Сообщение25.01.2021, 01:17 
Заслуженный участник
Аватара пользователя


22/06/12
2129
/dev/zero
Если использовать нормальную нотацию, то вы хотите узнать матрицу $A$ и вектор $\mathbf b$ такие, что $A \mathbf x_i + \mathbf b = \mathbf y_i$ для некоторого заданного набора $\mathbf x_i$, $\mathbf y_i$.

Преобразование общего вида, конечно, требует четырёх пар. Касательно остальных вопросов: надо фиксировать какой-то из векторов, скажем, $\mathbf x_1$ и перейти к набору векторов $\mathbf x'_i = \mathbf x_i - \mathbf x_1$, $i = 2, 3, 4$, и преобразвание станет
$$
A \mathbf x'_i + \mathbf b = A \mathbf x_i + \mathbf b - A \mathbf x_1 = \mathbf y_i - (\mathbf y_1 - \mathbf b) = \mathbf y'_i + \mathbf b,
$$
так что для штрихованных векторов получаем $A \mathbf x'_i = \mathbf y'_i$ для $i = 2, 3, 4$. Три векторных уравнения определяют девять компонент матрицы $A$; мы успешно выгнали из уравнений трансляцию $\mathbf b$.

Теперь ваши вопросы.
1)
ilghiz в сообщении #1502600 писал(а):
1. есть ли такое решение [дающее $A \in \mathrm{SO}(3)$ -- добавлено мной] для $k=3$,

то есть с учётом процедуры выше вы хотите матрицу чистых вращений в трёхмерном пространстве определить по результату на двух векторах. Чистые вращения сохраняют длины и углы, следовательно, такое решение для векторов общего положения в любом количестве не существует.

Если расширить класс искомых матриц до $\mathrm O(3)$, то есть разрешить $\det = -1$, то и тут не всё гладко: такое преобразование всё ещё будет сохранять длины, то есть векторы-результаты $\mathbf y'_i$ должны этому требованию соответствовать.

Возьмите ваши ладони в руки и сделайте из указательного и большого пальцев "пистолетики", оттопырив их (а остальные согнув). Поверните обе ладони кверху. Пусть большой палец на правой руке это вектор, скажем, $\mathbf x'_2$, указательный это $\mathbf x'_3$; на левой руке, соответственно, $\mathbf y'_2$ будет большой и $\mathbf y'_3$ указательный. Эти вы можете совместить обыкновенным поворотом вокруг одного их пальцев, но у вас возникнут проблемы, если вы будете пытаться большой палец отображать в указательный.

2)
ilghiz в сообщении #1502600 писал(а):
более того, без инверсий.

Продолжая про пальцы, то если вы оттопырите теперь ещё и средний палец на обоих руках некомпланарным образом (лишь бы в одну и ту же сторону), то повороты больше ничем вам не помогут: один из пальцев будет торчать не в ту сторону.

Этот пример иллюстрирует тот факт, что изучение всех возможных преобразований таких, которые конкретный вектор $\mathbf x_i$ переводят в конкретный вектор $\mathbf y_i$, может быть слишком ограничительным. Более содержательным может оказаться разговор о том, какие преобразования переводят $\mathbf x_i$ в какой-нибудь любой другой вектор $\mathbf y_j$.

3)
ilghiz в сообщении #1502600 писал(а):
если нет, то как для $k>3$ правильнее регуляризовать с учетом унитарности $A$?

МНК здесь может помочь, но сперва надо уточнить, чего именно вы хотите: преобразований "жёстких", то есть $\mathbf x_i \mapsto \mathbf y_i$, или "свободных" (преобразование точек как множества), $\mathbf x_i \mapsto \mathbf y_j$?

 Профиль  
                  
 
 Re: Унитарная матрица преобразования в 3D
Сообщение25.01.2021, 02:16 
Заслуженный участник


27/04/09
28128
Надеюсь, что жёстких (по условию вроде так — а то не была ли бы там где-то матрица перестановки), хотя тогда действительно проще всего искать «самое близкое» ортогональное преобразование тем же МНК. Кажется, там какое-то выражение с псевдообратными должно быть (они связаны с МНК, но я забыл как), и тогда есть полная надежда его красиво, быстро и точно считать всякими библиотеками численной линейной алгебры.

Но ещё можно найти вот то настоящее неортогональное преобразование, а потом взять его полярное разложение! От которого взять себе лишь унитарную/ортогональную часть (а неотрицательно определённая эрмитова/симметричная часть может быть полезной в оценке того, насколько наше приближение хорошо и не стоит ли сказать клиенту, что ничего на самом деле не клеится). Но надо сначала разобрать, тот ли будет смысл.

 Профиль  
                  
 
 Re: Унитарная матрица преобразования в 3D
Сообщение25.01.2021, 02:30 


11/08/18
363
Спасибо большое, StaticZero, за ответ!

Не, мне только надо $x_i$ в $y_i$!

Позвольте уточнить и возразить, в первом случае, для $k=3$, я конечно же предполагал, что
$\forall i \ne j=1,...,3: ||x_i-x_j||_2 \simeq ||y_i - y_j||_2$, а, следовательно, такое преобразование с учетом унитарности $A$ найти можно.

Пусть $x_1,x_2,x_3$ - координаты вершин треугольника, и $y_1,y_2,y_3$ соответствующие координаты вершин такого же треугольника после преобразования. Очевидно, что трансляцию можно вытащить из $y_1-x_1$, а, далее нам потребуется две степени свободы для совмещения $x_2$ и $y_2$ и еще одна степень свободы для совмещения $x_3$ и $y_3$.

Вот будет ли получаемые $A$ и $b$ - единственными - мне не понятно, и, даже, если и будут, то будет ли численно устойчиво нахождение $A$ и $b$ в зависимости от малых возмущений по $x_1,x_2,x_3$ и $y_1,y_2,y_3$ - очень не очевидно.

Мой второй вопрос был как раз в том, на сколько малые возмущения по $x$ и $y$ могут изменить сами значения в $A$ и $b$. Мне понятно нужна унитарность по $A$, но я могу ее дополнительно требовать или нет. Если ее не требовать, то все сводится к решению линейной системы с матрицей $4 \times 4$ и тремя правыми частями, но если потребовать унитарность, то хоть и неизвестных становится не много и градиенты выписываются, решать такую нелинейность очень бы не хотелось бы.

В моем случае ошибка сидит в $x$ и $y$, следовательно наименьшие квадраты надо писать, если по-честному, только по их отклонениям.

----

Сейчас подумал и понял, что мне нужна вот такая задача:

у меня есть тройки точек $x_1,x_2,x_3 \in {\mathbb R}^3$ и $y_1,y_2,y_3 \in {\mathbb R}^3$, про которые известно, что $x_i \to y_i, \forall i=1,2,3$, и известно, что расстояния внутри каждой тройки более-менее сохраняются (численная погрешность конечно имеет место быть). Мне надобно найти для каждой такой пары троек матрицу трансформаций и вектор переноса причем так, чтобы значения в этой матрице и векторе были численно устойчивы.

То есть пусть у меня есть $A$ и $b$, и я подействовал на сотню ($N$) каких-то точек $X=[x_1,\dots,x_N]$ и получил соотвествующий набор $Y=[y_1,\dots\y_N]$. Я хочу, чтобы любая комбинация трех точек из $X$ и соответсвующая ей комбинация точек из $Y$ давала бы мне одни и те же $A$ и $b$.

С четырьмя точками - понятно, все будет работать, но хочется с тремя, ибо при большом $N$ все комбинации четырех точек и все комбинации из трех точек - это две очень большие разницы :(

-- 25.01.2021, 01:38 --

Спасибо большое, arseniiv, за ответ!

arseniiv в сообщении #1502613 писал(а):
Кажется, там какое-то выражение с псевдообратными должно быть (они связаны с МНК, но я забыл как), и тогда есть полная надежда его красиво, быстро и точно считать всякими библиотеками численной линейной алгебры.

да я довел это до конца, формулы не сильно страшные, но всяко три раза сингулярное разложение, и корни методом деления отрезка пополам, выкладки пока не осилил написать, на бумаге больше 3-х страниц получились. Мне как-то это показалось слишком громоздким, а хочется чего-то красивого. Если эти выкладки имеют смысл, завтра постораюсь их здесь записать.

 Профиль  
                  
 
 Re: Унитарная матрица преобразования в 3D
Сообщение25.01.2021, 02:57 
Заслуженный участник
Аватара пользователя


22/06/12
2129
/dev/zero
ilghiz в сообщении #1502615 писал(а):
С четырьмя точками - понятно, все будет работать, но хочется с тремя, ибо при большом $N$ все комбинации четырех точек и все комбинации из трех точек - это две очень большие разницы :(

Ну, выгоните отсюда трансляцию, если вы хотите единый $\mathbf b$ для всех, будут вам тройки точек. Правда это всё равно $O(N^3)$. Может быть, можно лучше? Например, сделать пристрелку по выпуклой оболочке, а потом уточнить. Надо дальше формализовывать и думать.

 Профиль  
                  
 
 Re: Унитарная матрица преобразования в 3D
Сообщение25.01.2021, 03:30 
Заслуженный участник


27/04/09
28128
Да, я навёл себе справки, и ну вот: если нам надо «решить» несовместную систему $A\mathbf v = \mathbf b$ или получить решение совместной, имеющее наименьший скалярный квадрат, то мы берём $\mathbf v^\circ = A^+ \mathbf b$, и аналогично для $A X = B$ нам нужно взять $X^\circ = A^+ B$, где $A^+$, конечно же, псевдообращение $A$.

И вот этот-то $X$ дальше и раскладывать полярно.

(Кстати если бы случай был двумерный, можно было бы быстренько комплексными числами управиться довольно наивным, но в общем правильным по отношению к типичным ожиданиям от результата (впрочем, я не пробовал доказывать) алгоритмом. В трёхмерном скорее всего можно что-то схитрить на кватернионах, но лучше взять более понятные и обобщаемые на любую размерность способы как тот, что выше.)

И в вашем случае $A$ это стопка иксов и $B$ — стопка игреков, а вот $A^+ B$ можно найти сразу одной функцией, ну смотря что вы используете. Например в NumPy* это функция lstsq (под капотом использующая функции ?gelsd из LAPACK, и наконец эти функции используют SVD), а вот полярного разложения в текущей версии NumPy нет, и придётся опять использовать SVD, уже в явную. А если вы используете другой язык и библиотеку, то может там уже реализовано. И очень надеюсь, что вы не пишете эти алгоритмы руками с нуля — вычислительная математика очень коварная штука с кучей подводных камней, и чтобы иметь уверенность в том, что реализация имеет все нужные свойства, надо обкладываться справочниками. (Или может быть специалисты в численных методах вас успокоят, но боюсь, что могут согласиться.)

* NumPy — просто самая известная мне библиотека, в которой есть (через LAPACK, очевидно) алгоритмы численной линейной алгебры, решения с использованием которой я могу в принципе потестить довольно быстро, хотя даже ею я не пользовался почти ни разу.

 Профиль  
                  
 
 Re: Унитарная матрица преобразования в 3D
Сообщение25.01.2021, 03:32 


11/08/18
363
Спасибо большое, StaticZero, что помогаете!

StaticZero в сообщении #1502618 писал(а):
Ну, выгоните отсюда трансляцию, если вы хотите единый $\mathbf b$ для всех, будут вам тройки точек.

так не устойчиво получается, я уже попробовал :(

Грубо говоря, если считать по четверкам, то матрицы и вектора преобразования более-менее хорошо получаются, а если единожды трансляцию выкинуть, то набегает ошибка. Можно правда трансляцию разную подставлять, но это все равно по арифметической сложности как если по четверкам считать.

 Профиль  
                  
 
 Re: Унитарная матрица преобразования в 3D
Сообщение25.01.2021, 03:38 
Заслуженный участник


27/04/09
28128
Во, и совет про трансляцию: возьмите вместо исходных столбцов столбцы, дополненные единицей (в компграфике часто говорят «проектвное пространство», но это одна из небольших ошибок, и на самом деле там используется вложение аффинного пространства в линейное), и ищите матрицу порядком на один больше. Последний столбец матрицы даст вектор параллельного переноса, если последний элемент там будет тоже единицей (а последняя строка кроме этой единицы должна быть нулевой). Правда я сомневаюсь, что теперь мы можем использовать МНК с обычным скалярным произведением. Но попробуйте на каких-то тестах, вдруг работает. Если не очень работает, значит надо будет кое-что предпринять, пока лень думать как оно выразится.

-- Пн янв 25, 2021 05:45:35 --

Скорее всего не сработает, но чем чёрт не шутит.

 Профиль  
                  
 
 Re: Унитарная матрица преобразования в 3D
Сообщение25.01.2021, 03:53 


11/08/18
363
Спасибо большое, arseniiv!

arseniiv в сообщении #1502620 писал(а):
И вот этот-то $X$ дальше и раскладывать полярно.

Да, верно, только тут-то как раз собака-то и порылась.

Итак, пусть у нас 3 точки, пусть мы трансляцию выгнали, то есть имеем:

$$A x_1 + b = y_1$$
$$A (x_2-x_1) = y_2-y_1$$
$$A (x_3-x_1) = y_3-y_1$$

Запишем для матрицы $[x_2-x_1, x_3-x_1]$ ее сингулярное разложение $U_xD_xV^T_x$, и перекинем направо правые сингулярные векторы и диагональ.
Тогда имеем $A U_x = H$, где $H=[y_2-y_1,y_3-y_1]V_x D_x^{-1}$.

Очевидно, что $A = H U_x^T + v w^T$, где $U_x^T v = 0$, а $w$ - произвольное неизвестное.

Чтобы потребовать унитарности $A$, потребуем

$$||AA^T - I||_2^2 = ... = ||T + x x^T||_2^2, T = H H^T - I,$$

по построению, $T$ - симметричная, то есть $T = VDV^T$, и поиск сводится к поиску неизвестного $z$, который минимизирует $||D - zz^T||_2^2$, с диагональной $D$, а это не имеет разумного решения, если у $D$ на диагонали больше одного не нулевого элемента.

По построению, есть ожидание, что там все должно быть хорошо, но как это себя будет вести численно, у меня пока только негативное предчуствие.


arseniiv в сообщении #1502620 писал(а):
А если вы используете другой язык и библиотеку, то может там уже реализовано. И очень надеюсь, что вы не пишете эти алгоритмы руками с нуля — вычислительная математика очень коварная штука с кучей подводных камней, и чтобы иметь уверенность в том, что реализация имеет все нужные свойства, надо обкладываться справочниками. (Или может быть специалисты в численных методах вас успокоят, но боюсь, что могут согласиться.)


Эх, верно, когда-то сам писал для лапака модули с четверной точностью, и для гпу-лапака на заре оного тоже немного писал, поэтому чутье в классике линейной алгебры немного есть, а вот с геометрией - как-то мимо прошел, поэтому и вопршаю.

 Профиль  
                  
 
 Re: Унитарная матрица преобразования в 3D
Сообщение25.01.2021, 03:53 
Заслуженный участник


27/04/09
28128
ilghiz в сообщении #1502622 писал(а):
так не устойчиво получается, я уже попробовал :(
А как вы делали? StaticZero предлагает вычитать первую точку, но неужели будет плохо и если вычитать их барицентр (среднее арифметическое)? Барицентр при линейном преобразовании переходит в барицентр, и при переносе тоже, и стоит ожидать, что если л. п. близко к ортогональному, то барицентр данных нам «зашумлённых» игреков близок к барицентру точных игреков, получающихся ортогональным преобразованием.

Например если есть вера, что игреки зашумлены добавлением независимых одинаково нормально распределённых векторчиков, то в итоге у нас барицентр таких игреков зашумлён по отношению к настоящему тоже прибавкой некоторого нормально распределённого вектора, у которого дисперсия в корень из числа точек раз больше дисперсии тех векторчиков. Не так уж и плохо(?)

-- Пн янв 25, 2021 05:55:57 --

Ага, вот попробуйте вычитать барицентр — вдруг стабильность улучшится. Я не могу быть уверен, потому что численные алгоритмы для меня довольно тёмная вещь, но будет приятно если догадки оправдаются хоть насколько-то.

-- Пн янв 25, 2021 05:56:36 --

А, ну и если вычитается барицентр, то всё то про увеличение размерности векторов и матриц (ну, добавление единицы последней координатой и вот всё то), что я выше предлагал, отправляется в топку.

 Профиль  
                  
 
 Re: Унитарная матрица преобразования в 3D
Сообщение25.01.2021, 03:57 


11/08/18
363
arseniiv в сообщении #1502623 писал(а):
Во, и совет про трансляцию: возьмите вместо исходных столбцов столбцы, дополненные единицей (в компграфике часто говорят «проектвное пространство», но это одна из небольших ошибок, и на самом деле там используется вложение аффинного пространства в линейное), и ищите матрицу порядком на один больше.


Так я в самом первом моем сообщении написал, что так и делал. На четверках пробно более-менее работает (с устойчивостью по крайней мере можно применять классику, ибо там системы линейные и можно смотреть на обусловленность через сингулярные числа), но не устраивает то, что четверки - не тройки, и в моем случае четверок в $N$ раз больше троек.

Хочется как раз все замутить с тройками.

 Профиль  
                  
 
 Re: Унитарная матрица преобразования в 3D
Сообщение25.01.2021, 04:04 
Заслуженный участник


27/04/09
28128
ilghiz в сообщении #1502626 писал(а):
Так я в самом первом моем сообщении написал, что так и делал.
Да, я как-то плохо вчитался совсем и подумал, что ваше представление это что-то другое. :| Но ожидаемо, что не работает, хотя я не полностью могу сейчас объяснить, почему. Когда мы вкладываем аффинное пространство в линейной размерностью выше, то в том линейном у нас уже не будет естественного евклидова произведения, а будет какая-то хитрая структура, которая к МНК, кажется, не очень приспособлена. Я про эту структуру когда-то хотел подумать, но забыл, и про МНК тем более не думал. Может в этот раз что-нибудь получится, хотя бы чтобы объяснить источник неудачи вот в этом алгоритме.

А барицентр отнимать попробуйте — если и он будет себя вести плохо, будет уже интересная история!

 Профиль  
                  
 
 Re: Унитарная матрица преобразования в 3D
Сообщение25.01.2021, 09:03 
Заслуженный участник
Аватара пользователя


22/06/12
2129
/dev/zero

(Оффтоп)

arseniiv в сообщении #1502625 писал(а):
дисперсия в корень из числа точек раз больше дисперсии тех векторчиков

Или меньше?

 Профиль  
                  
 
 Re: Унитарная матрица преобразования в 3D
Сообщение25.01.2021, 15:18 


11/08/18
363
Спасибо большое, StaticZero и arseniiv за советы!!!

Похоже с тройками тоже все делается, надо вначале вычислить $A$ по возможности максимально устойчиво. Если наложить ограничения, что исходные и конечные расстояния в треугольнике из трех точек равны, и углы в треугольнике не близки к 0 или 180, то можно гарантировать численно устойчивое построение $A$ в виде унитарной матрицы. А дальше, по совету arseniiv, использовать барицентр для поиска вектора трансформации $b$, тут вроде с устойчивостью тоже все в порядке получается, так как $A$ уже унитарная и любые средние как раз минимизируют евклидову норму.

Появился правда сопутствующий вопрос... Матрица трансформаций задана тремя углами, хотя вычисляется в виде девяти чисел. Мне далее ее надо сравнивать, и хотелось бы уменьшить размерность. Сразу видно, что можно матрицу пересчитать в углы и для каждого угла записать его синус и косинус. Тогда будет только шесть чисел. Углы сами сравнивать не удобно, так как при переходе от $-\pi$ к $+\pi$ реальное расстояние между углами может быть маленькое, а разница в $l_2$-норме далеко не такой маленькой.

Скажите, пожалуйста, а есть ли какое-то представление матрицы поворотов с не большим числом переменных $g$, чтобы любое расстояние векторов $g$ по $l_2$-норме не сильно отличалось от сравнения либо векторов, составленных из элементов самих матриц, или из пар синус-косинус?

 Профиль  
                  
 
 Re: Унитарная матрица преобразования в 3D
Сообщение25.01.2021, 15:25 
Заслуженный участник
Аватара пользователя


22/06/12
2129
/dev/zero
ilghiz, я ничего не понял про норму, но поворот задаётся осью и углом, а ось задаётся единичным вектором вдоль неё. Всего 4 компонента. три, если вектор оси единичный

PS Чтобы вставить никнейм, надо нажать прямо на него: он от этого скопируется в форму ответа.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 19 ]  На страницу 1, 2  След.

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group