times, .*

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

Синтаксис

Описание

пример

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

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

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

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

Примеры

свернуть все

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

A = quaternion([1:4;5:8]);
B = A;
C = A.*B
C = 2x1 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 = 3x3 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 = 1x3 quaternion array
           0 +       0i +       0j +       0k           1 +       0i +       0j +       0k     0.53767 +  1.8339i -  2.2588j + 0.86217k

b = quaternion(randn(4,4))
b = 4x1 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 = 4x3 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+bqi+cqj+dqk,

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

βq=βaq+βbqi+βcqj+βdqk

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

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

i2=j2=k2=ijk=-1,

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

 1ijk
11ijk
ii−1k−j
jj−k−1i
kkj−i−1

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

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

z=pq=(ap+bpi+cpj+dpk)(aq+bqi+cqj+dqk)=apaq+apbqi+apcqj+apdqk+bpaqi+bpbqi2+bpcqij+bpdqik+cpaqj+cpbqji+cpcqj2+cpdqjk+dpaqk+dpbqki+dpcqkj+dpdqk2

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

z=pq=apaq+apbqi+apcqj+apdqk+bpaqibpbq+bpcqkbpdqj+cpaqjcpbqkcpcq+cpdqi+dpaqk+dpbqjdpcqidpdq

Ссылки

[1] Kuipers, Джек Б. Кватернионы и последовательности вращения: краткая информация с приложениями к орбитам, космосу и виртуальной реальности. Принстон, NJ: Издательство Принстонского университета, 2007.

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

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

Смотрите также

Функции

Объекты

Введенный в R2020b