2014 dxdy logo

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

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


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


В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе "Помогите решить/разобраться (М)".

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

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.



Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Матрица поворота для молекулы
Сообщение11.06.2009, 20:23 


30/10/06
33
Даже стыдно совет спрашивать - задачка вроде как ерундовая, да вот никак не получается.
В математической постановке задача звучит на редкость примитивно: численно задан трехмерный вектор своими проекциями {x,y,z}, где x,y,z - известные мне числа. Нужно найти унитарную матрицу поворота 3х3, которая бы укладывала этот вектор на ось Х. Т.е. его коодинаты после такого поворота должны стать {r,0,0}, где r - длина вектора.
Для двумерного случая я задачу легко решил. Если вектор нормирован на единицу, то такая матрица будет выглядеть так: m=[x, y; -y, x] (MatLab-нотация). А для трехмерного случая ну никак...
Я понимаю, что в трехмерном варианте такая матрица однозначно не определена, поскольку решению задачи будут удовлетворять любые последующие вращения вокруг оси X. Но мне бы хоть какое-нибудь решение получить, т.к. случай у меня чисто практический - надо биомолекулу (полипептид), расположение которой задано координатами всех атомов, развернуть так, чтобы известный мне атом лег на одну из осей координат X. Т.е. надо перейти посредством вращения (начало коодинат я не трогаю) в такую систему координат, чтобы этот избранный атом на оси Y и Z не проецировался. Если при этом вокруг оси X молекула повернется, то для меня это не страшно.
Ну а верхом удовольствия было бы такое вращение, чтобы мой атом (вектор {x,y,z}) переместился по самой короткой дуге, т.е. совершил свое движение в плоскости, образованной этим вектором и осью X. В этом случае решение, очевидно, единственное. Однако, повторяю, что мне годится любая матрица вращения, укладывающая вектор {x,y,z} на ось Х и не нарушающая межатомных расстояний (т.е. унитарная).

P.S. Верхняя строка трехмерной матрицы поворота, по-видимому, будет выглядеть как [x, y, z], иначе не пролучится радиус по X-координате. А вот что должно быть в остальных двух строках - дело темное.

 Профиль  
                  
 
 Re: Матрица поворота для молекулы
Сообщение11.06.2009, 20:31 


06/01/09
231
Сделайте сначала поворот вокруг оси $OX$, который уложит Ваш вектор на плоскость $XOY$. Потом поверните там.

Влад.

 Профиль  
                  
 
 Re: Матрица поворота для молекулы
Сообщение11.06.2009, 21:30 


29/09/06
4552
Ещё вариант:
Алексей К. в сообщении #85650 писал(а):
Матрица поворота на угол $\theta$ вокруг оси с направляющим вектором ${\mathbf n}=(t_1,t_2,t_3)$ ($t_1^2+t_2^2+t_3^2=1$, ось проходит через начало координат) имеет вид
$$ R({\mathbf n},\theta) = \left|
\begin{array}{ccc}
            &\strut&\\
             c+d t_1^2  &  -s t_3+d t_1 t_2  &   s t_2+d t_1 t_3\\&&\\
                st_3+d t_1 t_2 &     c+d t_2^2 &   -s t_1+d t_2 t_3\\&&\\
               -st_2+d t_1 t_3 &  s t_1+d t_2 t_3 &      c+d t_3^2 \\
            &\strut&
\end{array}
\right|,\quad\mbox{где}\quad s=\sin\theta,\quad c=\cos\theta, \quad d=1-c.
$$

Сейчас дополню другими соображениями.

-- 11 июн 2009, 22:41 --

Вам нужно найти поворот, совмещающий вектора $V_1=(x,y,z)\;\mbox{и}\;V_2=(\sqrt{x^2+y^2+z^2},0,0)=(r,0,0)$. Определите угол $\theta$ между этими векторами. Определите ось поворота как векторное произведение $V_1\times V_2$. Примените указанную формулу. Угол определяется из скалярного произведения:
$$\cos\theta=\frac{V_1\cdot V_2}{|V_1|\, |V_2|}=\frac x r,\quad 
\sin\theta=+\sqrt{1-\cos^2\theta};\qquad
V_1\times V_2=\left(0,\frac{z}{\sqrt{z^2+y^2}},\frac{-y}{\sqrt{z^2+y^2}}\right).$$
Проверьте на каком-нибудь очевидном примере (имею обыкновение ошибаться).
Сама матрица при подстановке этих конкретных значений должна бы упроститься.

-- 12 июн 2009, 00:29 --

Если вектор (x,y,z) нормирован на 1, то получаем
$$\left|
\begin{array}{ccc}
            &\strut&\\
                x &  y                             &   z\\&&\\
               -y &  1-\dfrac{y^2}{1+x} & \dfrac{-yz}{1+x} \\&&\\
               -z &  \dfrac{-yz}{1+x}      &   1-\dfrac{z^2}{1+x}  \\
            &\strut&
\end{array}
\right|$$

 Профиль  
                  
 
 Re: Матрица поворота для молекулы
Сообщение12.06.2009, 03:21 


30/10/06
33
Алексей К., предложенная вами матрица действительно кладет вектор на ось X, однако для моих целей она не годится, поскольку она не унитарная (дело не в нормировке, а в наличии внедиагональных членов в произведении самой на себя транспонированную). Т.е. умножение на нее вызовет деформацию пространства, а в таком деформированном пространстве мои дальнейшие расчеты невозможны. Требование унитарности я оговаривал в условии задачи.

Мне только что удалось методом тыка с помощью MatLab подобрать вроде бы подходящую матрицу, однако это чистый подбор, а не решение. Вот что у меня получилось:

Обозначаю
>> syms x y z определяю символьные переменные
>> v = [x;y;z] это вектор
>> r = (x^2+y^2+z^2)^(1/2) это его радиус
>> d = (x^2+z^2)^(1/2) непонятно что, но нужно

А вот это сама матрица:
Код:
>> m = [x/r   y/r   z/r;   -x*y/d/r   d/r   -y*z/d/r;   -z/d   0   x/d]

Проверяю на унитарность:
>> simplify(m*transpose(m))
ans =
[ 1, 0, 0]
[ 0, 1, 0]
[ 0, 0, 1]
здесь и далее приходится явно вызывать функцию simplify(), чтобы упростить выражение. Без нее MatLab не может привести подобные члены.

Умножаю матрицу на вектор
>> simplify(m*v)

ans =
(x^2+y^2+z^2)^(1/2)
0
0

Это то же самое, что и
ans =
r
0
0

Вроде бы получилось то, что нужно, но как не знаю.

 Профиль  
                  
 
 Re: Матрица поворота для молекулы
Сообщение12.06.2009, 07:27 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
Oam в сообщении #221452 писал(а):
Для двумерного случая я задачу легко решил.


Ну тогда перейдите сначала к новой системе координат, в которой ось $Ox$ и Ваш вектор лежат в плоскости $Oxy$, после чего поворачивайте вокруг оси $Oz$ так, как уже умеете. Чтобы новая система координат была ортонормированной, примените процесс ортогонализации Грама-Шмидта. Тогда после домножений на матрицу перехода вся нужная ортогональность/унитарность сохранится.

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

 Профиль  
                  
 
 Re: Матрица поворота для молекулы
Сообщение12.06.2009, 10:21 


29/09/06
4552
Алексей К. в сообщении #221464 писал(а):
\fbox{Если вектор (x,y,z) нормирован на 1}, то получаем
$$\left|
\begin{array}{ccc}
            &\strut&\\
                x &  y                             &   z\\&&\\
               -y &  1-\dfrac{y^2}{1+x} & \dfrac{-yz}{1+x} \\&&\\
               -z &  \dfrac{-yz}{1+x}      &   1-\dfrac{z^2}{1+x}  \\
            &\strut&
\end{array}
\right|$$

Матрица унитарна на 100%.
Похоже, Вы просто не сумели преобразовать, а именно упростить члены типа $x^2-1+y^2+z^2$. Если вектор (x,y,z) нормирован на 1, то $x^2-1+y^2+z^2=$0. Или, например, $1-x^2=y^2+z^2$.
Например, элемент (3,3) произведения $R\times R^T$ равен
$$\frac{z^2x^2-z^2+y^2z^2+x^2+2x+1+z^4}{(x+1)^2}=
   \frac{z^2(x^2-1+y^2+z^2)+x^2+2x+1}{(x+1)^2}=
\frac{z^2\cdot 0+(x+1)^2}{(x+1)^2}=1.$$

 Профиль  
                  
 
 Re: Матрица поворота для молекулы
Сообщение12.06.2009, 12:44 


30/10/06
33
Алексей К. в сообщении #221530 писал(а):
Похоже, Вы просто не сумели преобразовать, а именно упростить члены...

Умножение на самосопряженную и упрощение выражений я поручал MatLab'у, который с вашей матрицей видимо не справился.
Скажите, а что будет при x=-1? В вашей матрице при этом появляются нули в знаменателе, в то время как вектор с такой координатой является допустимым объектом для поворота. Меня это смущает тем, что в моей макромолекуле много атомов, и я не могу заранее исключить возможность того, что у нужного мне атома не окажется x=-1. Координаты атомов выбираются из данных рентгеноструктурного анализа, в которых начало координат чаще всего выбираются, как "центр тяжести" макромолекулы. Т.е. отрицательные значения координат в такой сетке присуствуют на общих правах. И мне в своих расчетах изменять начало координат непозволительно, т.к. эта точка как раз и считается за местоположение молекулы.
У мною найденной матрицы тоже еcть подобная проблема, т.к. векторы типа {0,y,0} порождают деление на нуль. В то время как из общих представлений очевидно, что поворот возможен всегда при ненулевой длине вектора. Возможно ли в принципе построить такую матрицу поворота, чтобы ее элементы были определены для любого ненулевого вектора?
И еще один вопрос, косвенно связанный с первым. Не подскажете ли метод, как попроще определить, не выворачивает ли матрица преобразования пространство на изнанку? Дело в том, что если поменять знак у одной из координаты, то пространственный объект становится зеркальным. Матрица, допускающая зеркальную трансформацию, может оставаться унитарной и правильно класть вектор на ось Х. Математики на этот вопрос внимания не обращают, но для меня это очень важно. Дело в том, что молекула полипептида состоит из звеньев природных аминокислот, которые, как известно, имеют L-форму (левую). А если вдруг матрица трансформации вывернет эту левую перчатку в правую, то у меня возникнут огромные проблемы. Ведь по оси Х к моей молекуле приближается другая, а моя задача найти оптимальное положение "стыковки". Если моя молекула вывернется наизнанку (превратиться из левой формы в правую), то стыковка вообще окажется невозможной, как невозможно накрутить гайку с левой резьбой на винт с правой. Короче говоря, если у меня имеется абстрактная унитарная матрица габарита 3x3, то как проверить, выворачивает ли она пространство зеркально или нет? Предполагаю, что ее надо натравить на какой-то примитивный примерчик, для которого результат очевиден. Только никак не могу сообразить, какой пример тут нужен.

 Профиль  
                  
 
 Re: Матрица поворота для молекулы
Сообщение12.06.2009, 13:13 
Заслуженный участник


11/05/08
32166
Oam в сообщении #221549 писал(а):
, как попроще определить, не выворачивает ли матрица преобразования пространство на изнанку?

Посчитать определитель. Если получится плюс единица, то это чистый поворот, если минус единица -- то с отражением.

 Профиль  
                  
 
 Re: Матрица поворота для молекулы
Сообщение12.06.2009, 14:38 


29/09/06
4552
Oam в сообщении #221549 писал(а):
Умножение на самосопряженную и упрощение выражений я поручал MatLab'у, который с вашей матрицей видимо не справился.
Этого не может быть с современными пакетами. Просто ему надо было явно указать, что $z^2=(1-x^2-y^2)$ и, возможно, $z^4=(1-x^2-y^2)^2$. Сам он до этого, действительно, не додумается.

Oam писал(а):
Скажите, а что будет при x=-1? В вашей матрице при этом появляются нули в знаменателе, в то время как вектор с такой координатой является допустимым объектом для поворота. Меня это смущает тем, что в моей макромолекуле много атомов, и я не могу заранее исключить возможность того, что у нужного мне атома не окажется x=-1.
В этом случае неопределена ось поворота (векторное произведение равно нулю).
$x=-1$ означает $y=z=0$, а $x=-1+\varepsilon$ влечёт что-то вроде $y,z\lesssim \sqrt\varepsilon$, и в пределе матрица принимает вид $\begin{vmatrix} -1&0&0\\0&0&-1\\0&-1&0\end{vmatrix}$, вполне законный.
Как этот предел реализовать в программировании пока не думал, но приёмы стандартны.
Навскидку, иметь код типа
Код:
if x>=0 {этот вариант} else {некий второй вариант} end if
(Так делают даже в казалось бы простом случае решения квадратного уравнения, когда заботятся о точности вычислений.)Недодуманное удалено.
Oam писал(а):
Возможно ли в принципе построить такую матрицу поворота, чтобы ее элементы были определены для любого ненулевого вектора?

Не знаю. Боюсь, другие предложенные здесь методы упрутся в ту же проблему. Так, в варианте сначала уложить вектор горизонтально потребуется IF он строго вертикален с аналогичными проблемами.

Oam писал(а):
Математики на этот вопрос внимания не обращают.
Глубоко неверное утверждение. Ответ даден ewertом.

-- 12 июн 2009, 15:58 --

В конце концов, Вы можете написать
Код:
if x=-1 {предельная матрица } else {общая матрица } end if
, понимая, что рискуете потерять точность при x=-0.999999 (ибо при x=-0.999 компьютер Вас всё же, видимо, выручит).

Или при $x<0$ совершить предварительно простой поворот всей системы с указанной предельной матрицей, после чего смело применять предложенное преобразование.
(Это, видимо, и есть предложенный выше "некий второй вариант".)

 Профиль  
                  
 
 Re: Матрица поворота для молекулы
Сообщение13.06.2009, 00:39 
Заслуженный участник


19/06/05
486
МГУ
Могу вот такую матрицу Вам предложить:
$$
\left(\begin{array}{ccc}
\frac{x}{r} & \frac{y}{r} & \frac{z}{r} \\
0 & \frac{z}{d} & -\frac{y}{d} \\
-\frac{d}{r} & \frac{xy}{rd} & \frac{xz}{rd} \\
\end{array}\right)
$$
где $d=\sqrt{y^2+z^2}$, $r=\sqrt{x^2+y^2+z^2}$. В данном случае если $d$ обращается в 0, то это означает, что $y=z=0$, т.е. вектор уже имеет вид $(x,0,0)$ и поворачивать ничего не нужно.

 Профиль  
                  
 
 Re: Матрица поворота для молекулы
Сообщение13.06.2009, 01:12 


30/10/06
33
Gordmit в сообщении #221734 писал(а):
Могу вот такую матрицу Вам предложить:
$$
\left(\begin{array}{ccc}
\frac{x}{r} & \frac{y}{r} & \frac{z}{r} \\
0 & \frac{z}{d} & -\frac{y}{d} \\
-\frac{d}{r} & \frac{xy}{rd} & \frac{xz}{rd} \\
\end{array}\right)
$$
где $d=\sqrt{y^2+z^2}$, $r=\sqrt{x^2+y^2+z^2}$. В данном случае если $d$ обращается в 0, то это означает, что $y=z=0$, т.е. вектор уже имеет вид $(x,0,0)$ и поворачивать ничего не нужно.


Спасибо! Ваша матрица очень похожа на мою из 17-го сообщения:
$$
\left(\begin{array}{ccc}
\frac{x}{r} & \frac{y}{r} & \frac{z}{r} \\
-\frac{xy}{dr} & \frac{d}{r} & -\frac{yz}{dr} \\
-\frac{z}{d} & 0 & \frac{y}{d} \\
\end{array}\right)
$$
где $d=\sqrt{x^2+z^2}$

которая у меня была записана в нотации MatLab'а так:
Код:
>> m = [x/r   y/r   z/r;   -x*y/d/r   d/r   -y*z/d/r;   -z/d   0   x/d]

Причем использована тоже буква d!
Как вы получили эту матрицу?

 Профиль  
                  
 
 Re: Матрица поворота для молекулы
Сообщение13.06.2009, 01:43 
Заслуженный участник


19/06/05
486
МГУ
Ну да, я специально стремился записать матрицу похоже на Вашу предыдущую такого вида. А получил я ее так: сначала сделаем поворот вокруг оси $Ox$ так, чтобы наш вектор оказался в плоскости $xOz$, для этого используем матрицу
$$
\left(\begin{array}{ccc}
1 & 0 & 0 \\
0 & \cos\varphi & -\sin\varphi \\
0 & \sin\varphi & \cos\varphi \\
\end{array}\right)
$$
где угол $\varphi$ выбирается так, чтобы $\cos\varphi=\frac{z}{d}$, $\sin\varphi=\frac{y}{d}$.
Затем нужно в плоскости $xOz$ повернуть вектор так, чтобы его направление совпало с направлением оси $Ox$ (т.е. поворот будет вокруг оси $Oy$), для чего используется матрица
$$
\left(\begin{array}{ccc}
\cos\psi & 0 & -\sin\psi \\
0 & 1 & 0 \\
\sin\psi & 0 & \cos\psi \\
\end{array}\right)
$$
где угол $\psi$ таков, что $\cos\psi=\frac{x}{r}$, $\sin\psi=-\frac{d}{r}$.

Теперь осталось эти две матрицы перемножить (вторую слева на первую) и получим требуемое.

Кстати, Ваша матрица получается аналогично: сначала поворот вокруг $Oy$ так, чтобы вектор оказался в плоскости $xOy$, а затем поворот вокруг оси $Oz$ (так, чтобы вектор в плоскости $xOy$ перешел в нужный - совпадающий по направлению с осью $Ox$).

 Профиль  
                  
 
 Re: Матрица поворота для молекулы
Сообщение13.06.2009, 02:20 


30/10/06
33
Gordmit в сообщении #221734 писал(а):
Могу вот где $d=\sqrt{y^2+z^2}$. В данном случае если $d$ обращается в 0, то это означает, что $y=z=0$, т.е. вектор уже имеет вид $(x,0,0)$ и поворачивать ничего не нужно.


Этим ваша матрица лучше моей! Еще раз благодарю, ваше решение идеально!
Однако никак не могу удержаться, чтобы не задать вам вопрос: "Что вы думаете про матрицу, предложенную Алексей К.? Почему она не похожа на наши матрицы?" :)

 Профиль  
                  
 
 Re: Матрица поворота для молекулы
Сообщение13.06.2009, 03:23 
Заслуженный участник


19/06/05
486
МГУ
Наши с Вами матрицы представляют собой композиции поворотов вокруг двух разных осей (одна - вокруг $Ox$ и $Oy$, другая - вокруг $Oy$ и $Oz$), в то время как матрица, которую предложил Алексей К., производит поворот напрямую в плоскости, натянутой на вектора $(x,y,z)$ и $(r,0,0)$ (т.е. по сути то, что в первом сообщении обозначено как верх удовольствия). При этом не работает она в точности в том же случае - когда $y=z=0$.

Недостаток матрицы Алексея К. состоит в том, что вектор $(x,y,z)$ должен быть нормирован (что, впрочем, легко исправить: достаточно заменить везде $x,y,z$ на $\frac{x}{r},\frac{y}{r},\frac{z}{r}$ соответственно, а затем домножить все элементы матрицы на $r$), ну и обоснование того, что она делает нужное преобразование, посложнее.

 Профиль  
                  
 
 Re: Матрица поворота для молекулы
Сообщение13.06.2009, 03:42 


30/10/06
33
Gordmit в сообщении #221746 писал(а):
матрица, которую предложил Алексей К., производит поворот напрямую в плоскости, натянутой на вектора $(x,y,z)$ и $(r,0,0)$ (т.е. по сути то, что в первом сообщении обозначено как верх удовольствия).


Тогда я также горячо благодарю и Алексея К., и приношу ему свои извинения за то, что не сразу оценил его результат.

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

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



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

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


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

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