times, .*

Поэлементное кватернионное умножение

Синтаксис

Описание

пример

quatC = A.*B возвращает элементное кватернионное умножение кватернионных массивов.

Можно использовать кватернионное умножение, чтобы составить операторы вращения:

  • Чтобы составить последовательность поворотов системы координат, умножьте кватернионы в том же порядке, как и желаемую последовательность вращений. Для примера, применить p кватернион с последующим q кватернионом, умножить в порядок <reservedrangesplaceholder0>. Оператор вращения становится(pq)v(pq), где v представляет объект для вращения в кватернионной форме. * представляет собой сопряжение.

  • Чтобы составить последовательность поворотов точек, умножьте кватернионы в обратном порядке требуемой последовательности поворотов. Для примера, применить p кватернион с последующим q кватернионом, умножить в обратном порядке, qp. Оператор вращения становится (qp)v(qp).

Примеры

свернуть все

Создайте два вектора, A и B, и умножить их элемент на элемент.

A = quaternion([1:4;5:8]);
B = A;
C = A.*B
C=2×1 quaternion array
     -28 +   4i +   6j +   8k
    -124 +  60i +  70j +  80k

Создайте два массива 3 на 3, A и B, и умножить их элемент на элемент.

A = reshape(quaternion(randn(9,4)),3,3);
B = reshape(quaternion(randn(9,4)),3,3);
C = A.*B
C=3×3 quaternion array
     0.60169 +  2.4332i -  2.5844j + 0.51646k    -0.49513 +  1.1722i +  4.4401j -   1.217k      2.3126 + 0.16856i +  1.0474j -  1.0921k
     -4.2329 +  2.4547i +  3.7768j + 0.77484k    -0.65232 - 0.43112i -  1.4645j - 0.90073k     -1.8897 - 0.99593i +  3.8331j + 0.12013k
     -4.4159 +  2.1926i +  1.9037j -  4.0303k     -2.0232 +  0.4205i - 0.17288j +  3.8529k     -2.9137 -  5.5239i -  1.3676j +  3.0654k

Обратите внимание, что кватернионное умножение не коммутативно:

isequal(C,B.*A)
ans = logical
   0

Создайте вектор-строку a и вектор-столбец bи умножьте их. Вектор-строка 1 на 3 и 4 на 1 векторе-столбце объединиться, чтобы создать матрицу 4 на 3 с умноженными всеми комбинациями элементов.

a = [zeros('quaternion'),ones('quaternion'),quaternion(randn(1,4))]
a=1×3 quaternion array
           0 +       0i +       0j +       0k           1 +       0i +       0j +       0k     0.53767 +  1.8339i -  2.2588j + 0.86217k

b = quaternion(randn(4,4))
b=4×1 quaternion array
      0.31877 +   3.5784i +   0.7254j -  0.12414k
      -1.3077 +   2.7694i - 0.063055j +   1.4897k
     -0.43359 -   1.3499i +  0.71474j +    1.409k
      0.34262 +   3.0349i -  0.20497j +   1.4172k

a.*b
ans=4×3 quaternion array
            0 +        0i +        0j +        0k      0.31877 +   3.5784i +   0.7254j -  0.12414k      -4.6454 +   2.1636i +   2.9828j +   9.6214k
            0 +        0i +        0j +        0k      -1.3077 +   2.7694i - 0.063055j +   1.4897k      -7.2087 -   4.2197i +   2.5758j +   5.8136k
            0 +        0i +        0j +        0k     -0.43359 -   1.3499i +  0.71474j +    1.409k       2.6421 -     5.32i -   2.3841j -   1.3547k
            0 +        0i +        0j +        0k      0.34262 +   3.0349i -  0.20497j +   1.4172k      -7.0663 -  0.76439i -  0.86648j +   7.5369k

Входные параметры

свернуть все

Массив для умножения, заданный как кватернион, массив кватернионов, действительный скаляр или массив вещественных чисел.

A и B должны иметь совместимые размеры. В самых простых случаях они могут быть одинакового размера или же могут быть скаляром. Два входов имеют совместимые размеры, если для каждого измерения размерности входов одинаковые или один из них равен 1.

Типы данных: quaternion | single | double

Массив для умножения, заданный как кватернион, массив кватернионов, действительный скаляр или массив вещественных чисел.

A и B должны иметь совместимые размеры. В самых простых случаях они могут быть одинакового размера или же могут быть скаляром. Два входов имеют совместимые размеры, если для каждого измерения размерности входов одинаковые или один из них равен 1.

Типы данных: quaternion | single | double

Выходные аргументы

свернуть все

Кватернионовый продукт, возвращенное как скалярный, векторный, матричный или многомерный массив.

Типы данных: quaternion

Алгоритмы

свернуть все

Умножение кватерниона на реальный скаляр

Учитывая кватернион,

q=aq+bqя+cqj+dqk,

продукт q и действительной скалярной β является

βq=βaq+βbqя+βcqj+βdqk

Умножение кватерниона на кватернион Скаляр

Определение базисных элементов для кватернионов,

я2=j2=k2=ijk=-1,

можно расширить, чтобы заполнить таблицу, результирующую умножение базисного элемента кватерниона:

 1яjk
11яjk
яя−1k− j
jj− k−1я
kkj− i−1

При чтении таблицы строки считываются первыми, например: ij = k и ji = − k.

Учитывая два кватерниона, q=aq+bqя+cqj+dqk, и p=ap+bpя+cpj+dpk, умножение может быть расширено как:

z=pq=(ap+bpя+cpj+dpk)(aq+bqя+cqj+dqk)=apaq+apbqя+apcqj+apdqk+bpaqя+bpbqя2+bpcqij+bpdqik+cpaqj+cpbqji+cpcqj2+cpdqjk+dpaqk+dpbqki+dpcqkj+dpdqk2

Можно упростить уравнение, используя таблицу умножения кватерниона.

z=pq=apaq+apbqя+apcqj+apdqk+bpaqяbpbq+bpcqkbpdqj+cpaqjcpbqkcpcq+cpdqя+dpaqk+dpbqjdpcqяdpdq

Ссылки

[1] Kuipers, Jack B. Quaternions and Rotation Sequences: A Primer with Applications to Orbits, Aerospace and Virtual Reality. Princeton, NJ: Princeton University Press, 2007.

Расширенные возможности

Генерация кода C/C + +
Сгенерируйте код C и C++ с помощью Coder™ MATLAB ®

.
Введенный в R2018b