среда, 1 июля 2020 г.

Maxima: Бикватернионное преобразование в аффинное

Если имеется бикватернионное преобразование в виде произведения полуоператоров, можно ли его увидеть в другой форме, желательно как аффинное преобразование? Попробуем разобраться.

Бикватернионное преобразование вида $$ AXB $$ представляет собой произведение бикватернионов $A$, $X$, $B$ и содержит две операции умножения. Обе операции образуют при каждой мнимой единице линейные комбинации как по компонентам левого так и по компонентам правого множимых.

Следовательно, общий результат представляет собой в коэффициентах при мнимых единицах линейные комбинации по коэффициентам $a_i$, $x_i$ и $b_i$. Следовательно, если мы сможем выделить зависимость коэффициента при каждой мнимой единице результата от $x_i$ в правиле соответствующем произведению матрицы на вектор-столбец, мы получим правило перевода бикватернионного преобразования в аффинное.

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

Чтобы органиовать результат в виде матрицы, умножаемой на вектор-столбец, нужно рассмотреть что у нас на входе и на выходе. На входе в преобразованиях группы Лоренца (а мы именно ей и интересуемся) 4-вектор, содержащий скалярную и полярную части бикватерниона. При любых преобразованиях на выходе бикватернион того же вида. Следовательно, такое преобразование всегда представимо в виде произведения матрицы 4x4 на вектор-столбец.

Научим Maxima умножать бикватернионы в виде матриц:
makemat(x0,x1,x2,x3,x4,x5,x6,x7):=
matrix([x0,x1,x2,x3,-x4,-x5,-x6,-x7],
    [x1,x0,-x7,x6,x5,x4,-x3,x2],
    [x2,x7,x0,-x5,x6,x3,x4,-x1],
    [x3,-x6,x5,x0,x7,-x2,x1,x4],
    [x4,-x5,-x6,-x7,x0,-x1,-x2,-x3],
    [x5,-x4,x3,-x2,-x1,x0,-x7,x6],
    [x6,-x3,-x4,x1,-x2,x7,x0,-x5],
    [x7,x2,-x1,-x4,-x3,-x6,x5,x0]);
Исходный вектор обозначим в бикватернионах:
x:makemat(x0,x1,x2,x3,0,0,0,0);
Зададим левый и правый полуоператоры как преобразование Лоренца в виде движения по оси x:
left:makemat(cosh(psi/2),sinh(psi/2),0,0,0,0,0,0);
right:makemat(cosh(psi/2),sinh(psi/2),0,0,0,0,0,0);
Найдем произведение полуоператоров и заодно выскажем пожелание упростить тригонометрические и гиперболические функции:
biq:trigreduce(left.x.right);
И выделим из него матрицу, которую мы могли бы умножить на вектор-столбец:
Affine:matrix([diff(biq[1][1],x0),diff(biq[1][1],x1),
    diff(biq[1][1],x2),diff(biq[1][1],x3)],
  [diff(biq[2][1],x0),diff(biq[2][1],x1),
    diff(biq[2][1],x2),diff(biq[2][1],x3)],
  [diff(biq[3][1],x0),diff(biq[3][1],x1),
    diff(biq[3][1],x2),diff(biq[3][1],x3)],
  [diff(biq[4][1],x0),diff(biq[4][1],x1),
    diff(biq[4][1],x2),diff(biq[4][1],x3)]);
В результате получаем классическое преобразование Лоренца в виде матрицы: $$ \left( \begin{array}{cccc} \cosh(\psi) & \sinh(\psi) & 0 & 0 \\ \sinh(\psi) & \cosh(\psi) & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 \end{array} \right) $$ Для любопытства зададим вращение вокруг оси x:
left:makemat(cos(fi/2),0,0,0,0,sin(fi/2),0,0);
right:makemat(cos(fi/2),0,0,0,0,-sin(fi/2),0,0);
Здесь мы помним, что если не определили для правого полуоператора правило его вычисления скалярно-векторным сопряжением из левого, то выполняем это сопряжение самостоятельно.

Как результат, получаем опять же классику: $$ \left( \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & \cos(\varphi) & -\sin(\varphi) \\ 0 & 0 & \sin(\varphi) & \cos(\varphi) \end{array} \right) $$ И, собственно, задача решена - если мы знаем бикватернионы преобразований, то можем получить аффинное преобразование. Но, наверно, также было бы любопытно узнать как получить бикватернион полуоператора по его параметрам, аналогам половинных углов Родрига, но как для преобразований вращений так и для преобразований Лоренца одновременно. Но это уже тема другого поста, и это задача потенцирования бикватернионов. Впрочем, система компьютерной алгебры Maxima хорошо помогает и в этой задаче.

Комментариев нет:

Отправить комментарий