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 ] 

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



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

Сейчас этот форум просматривают: schmetterling


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

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