2014 dxdy logo

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

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


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


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



Начать новую тему Ответить на тему
 
 Ортогональная матрица переводящая вектор в другой
Сообщение22.06.2016, 14:17 


16/03/09
24
Добрый день! Возник следующий вопрос, и был бы рад Вашей помощи. Допустим у нас есть 2 вектора $x$ и $y=(0,\ldots, 0, -1)$ (размерности $n\ge 3$). Как найти $n$-мерную ортогональную матрицу $R$: $Rx=y$.

Рассмотрим самый простой случай, когда оба вектора лежат в плоскости, порожденной $e_{n-1}$ и $e_n$ (то есть у векторов первые $n-2$ координат равны 0). Тогда находим угол между векторами $\theta=\arccos \frac{(x,y)}{\Vert x\Vert\cdot \Vert y\Vert}$ и тогда
$$
R=\begin{pmatrix}
1 & \ldots & 0 & 0 & 0 \\
\ldots & \ldots & \ldots & \ldots & \ldots \\
0 & \ldots & 0 & \cos \theta & \sin \theta \\
0 & \ldots & 0 & -\sin \theta & \cos \theta 
\end{pmatrix}
$$
фактически совершая поворот на угол $\theta$ в двумерной плоскости $<e_{n-1}, e_{n}>$.

Как быть в общем случае? Была идея: найдем ортогональный базис $g_{n-1}, g_{n}$ в плоскости, порожденной $x$ и $y$ и дополним ее до базиса $g_1, g_2,\ldots,  g_{n-1}, g_{n}$ всего $\mathbb{R}^n$. Тогда можно совершить поворот на угол $\theta=\arccos \frac{(x,y)}{\Vert x\Vert\cdot \Vert y\Vert}$ в плоскости $<g_{n-1}, g_{n}>$, оставляя первые $n-2$ базисных вектора $g_1, g_2,\ldots,  g_{n-2}$.

Не хватает опыта в линейной алгебре строго провести рассуждения и проверить ручками полученную матрицу. :D

 Профиль  
                  
 
 Re: Ортогональная матрица переводящая вектор в другой
Сообщение22.06.2016, 14:26 
Заслуженный участник
Аватара пользователя


01/03/06
13626
Москва
Ортогональное преобразование сохраняет длины векторов, поэтому требуемое далеко не всегда выполнимо.

 Профиль  
                  
 
 Re: Ортогональная матрица переводящая вектор в другой
Сообщение22.06.2016, 14:30 
Заслуженный участник


09/05/13
8904
∞⠀⠀⠀⠀
... а когда выполнимо, такая матрица не одна. При таком $y$ самое простое - искать обратную.

 Профиль  
                  
 
 Re: Ортогональная матрица переводящая вектор в другой
Сообщение22.06.2016, 14:41 


16/03/09
24
Извиняюсь, был неточен. Перевести вектор $x$ в вектор, сонаправленный $y=(0,\ldots, 0, -1)$. Либо изначально можно полагать, что вектор $x$ длины 1.

Спасибо за второе замечание, но мне сходу не ясно, почему перевод из $y=(0,\ldots, 0, -1)$ в $x$ легче чем обратный? Хотя без разницы с вычислительной точки зрения, искать $R$ или $R^{-1}$. Одна получается транспонированием второй :-)

 Профиль  
                  
 
 Re: Ортогональная матрица переводящая вектор в другой
Сообщение22.06.2016, 14:53 
Заслуженный участник


09/05/13
8904
∞⠀⠀⠀⠀
Вы этот минус уберите, совсем хорошо будет. )
С вычислительной точки зрения как раз все и понятно. Значение матрицы на таком $y$ равно ее последнему столбцу, безо всяких примесей. Чего ж лучше-то?

Ну а остальные, стало быть - в ортогональном дополнении. Тут можно всяко. Самый "в лоб" способ - написать уравнение, задающее это самое ортогональное дополнение и найти его фундаментальную систему решений.

Как вариант.

Минус, если очень надо, потом дорисуете.

 Профиль  
                  
 
 Re: Ортогональная матрица переводящая вектор в другой
Сообщение22.06.2016, 15:08 


16/03/09
24
Спасибо!
Получается так (если изволите, я буду писать с минусом :-) ). Если ищем ортогональную матрицу $R$ такую, что $R (0, \ldots, 0, -1)^{\top}=x$ (полагаем, что длина вектора $x$ равна 1), то мы фактически получаем, что последний столбец $R$ есть вектор-столбец $(-x)$? Тогда первые $n-1$ столбцов можно найти как базис ортогонального дополнения подпространства $-x$, т.е. $(-x)^\bot$ (если я не забыл обозначения из линейной алгебры)?

 Профиль  
                  
 
 Re: Ортогональная матрица переводящая вектор в другой
Сообщение22.06.2016, 15:17 
Заслуженный участник


09/05/13
8904
∞⠀⠀⠀⠀
Да, конечно.

 Профиль  
                  
 
 Re: Ортогональная матрица переводящая вектор в другой
Сообщение22.06.2016, 15:22 


16/03/09
24
Спасибо Вам большое-пребольшое! Как просто и гениально :)

Ведь если домыслить, то получается, что если стоит общая задача перевести $x$ в $y$, то таким "простым-очевидным-наглядным" способом $x$ можно перевести ортогональным преобразованием $R_1$ в $e_n$, далее $y$ перевести ортогональными преобразованием $R_2$ в $e_n$, тогда искомое ортогональное преобразование есть $R_2^{-1}R_1=R_2^\top R_1$

Большое Вам спасибо еще раз!

 Профиль  
                  
 
 Re: Ортогональная матрица переводящая вектор в другой
Сообщение22.06.2016, 15:24 
Заслуженный участник


09/05/13
8904
∞⠀⠀⠀⠀
Правда, что-то мне подумалось, что искать базис ортогонального дополнения - это лишнее действие, много лучше не станет.
Имхо, надо взять любой базис пространства, содержащий в себе вектор $x$, и пройтись чем-то типа Грама-Шмидта. Все равно полученную ФСР потом пришлось бы ортогонализовывать.

Ну и да, плясать надо от вектора $x$, достраивая остальную систему до него ортогонально.

 Профиль  
                  
 
 Re: Ортогональная матрица переводящая вектор в другой
Сообщение22.06.2016, 15:33 


16/03/09
24
Предлагаете взять любой базис (скажем, стандартный $e_1,\ldots, e_n$) выкинуть один вектор оттуда и вписать вместо него $x$. Далее переставить $x$ на первое место и применить процесс Грама-Шмидта? А так как этот процесс на очередном шаге $k$ дает ортогональный базис первых $k$ векторов, то получившиеся вектора после процесса Грама-Шмидта с выкинутым первым вектором дают первые $n-1$ столбцов?

 Профиль  
                  
 
 Re: Ортогональная матрица переводящая вектор в другой
Сообщение22.06.2016, 15:52 
Заслуженный участник


09/05/13
8904
∞⠀⠀⠀⠀
$k$ и $n$ как-то плохо связаны. Наверное, Вы хотели сказать что-то другое. :)
mushti в сообщении #1133354 писал(а):
Предлагаете взять любой базис (скажем, стандартный $e_1,\ldots, e_n$) выкинуть один вектор оттуда и вписать вместо него $x$. Далее переставить $x$ на первое место

Можно и стандартный, если они линейно независимы, конечно. Это же от вектора $x$ зависит. Можно просто выстраивать систему векторов по типу верхнетреугольной/нижнетреугольной матрицы. Как Вам нравится. :) Но чтобы $x$ там был. А при ортогонализации его взять за первый, все верно. После применения процесса все $n$ векторов будут дружно составлять ортогональную систему. А что нам еще надо? а ничего.

 Профиль  
                  
 
 Re: Ортогональная матрица переводящая вектор в другой
Сообщение22.06.2016, 16:05 


16/03/09
24
Спасибо, с моей стороны весьма небрежно получилось.
Тогда я немножко подумаю о том, как можно поступить, чтобы было быстро и наглядно :-) Может смогу использовать какую-то специфичную информацию относительно $x$.
Не ожидал, что такая скромная тема получит такое широкое обсуждение сообществом dxdy :-) Очень рад и чрезмерно благодарен!

 Профиль  
                  
 
 Re: Ортогональная матрица переводящая вектор в другой
Сообщение22.06.2016, 17:27 
Заслуженный участник
Аватара пользователя


23/07/08
10910
Crna Gora
Позвольте предложить ещё один вариант. Пусть $(x,x)=(y,y)=1, (x,y)=\cos\theta$.

Сначала найдём в линейной оболочке $\{x, y\}$ дуальный базис $\{\tilde x, \tilde y\}$, заданный условиями $(\tilde x, x)=(\tilde y, y)=1$, $(\tilde x, y)=(\tilde y, x)=0$. Формулы для $\tilde x, \tilde y$ получатся несложные. Тогда произвольный вектор
$u=u_\perp+x(\tilde x, u)+y(\tilde y, u)$ ,
где $u_\perp$ ортогонален $x$ и $y$.

Пусть $\textsf R$ — нужный оператор поворота. Имеем $\textsf R u_\perp=u_\perp$, $\textsf R x=y$. Пусть $\textsf R y=z$ (выразите его через $x$ и $y$), тогда
$\textsf R u=u_\perp+y(\tilde x, u)+z(\tilde y, u)=u+(y-x)(\tilde x, u)+(z-x)(\tilde y, u)$
Последнюю формулу запишите в матричном виде.

P.S. Иногда нужен ортогональный оператор, но не обязательно поворота. Тогда можно искать оператор отражения, отображающий $x$ в $y$ и наоборот. В этом случае возьмите $z=x$. Формулы будут проще.

 Профиль  
                  
 
 Re: Ортогональная матрица переводящая вектор в другой
Сообщение22.06.2016, 18:42 
Заслуженный участник


11/05/08
32166
Оператор отражения выписывается сходу из чисто геометрических соображений: $$A\,\vec u=\vec u-2\frac{(\vec u,\vec y-\vec x)}{\|\vec y-\vec x\|^2}\,(\vec y-\vec x)$$ (т.е. надо просто вычесть из исходного вектора его удвоенную проекцию на $\vec y-\vec x$).

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

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



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

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


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

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