$SPAD/src/input quat.input

Timothy Daly December 3, 2016

Abstract

Contents

2

1 License

— license —

--Copyright The Numerical Algorithms Group Limited 1991.

———-

— * —

)set break resume
)spool quat.output
)set message test on
)set message auto off
)clear all

———-

The basic function for creating quaternions is “quatern”. This is a quaternion over the rational numbers.

— * —

--S 1 of 25
q := quatern(2/11,-8,3/4,1)
--R
--R
--R         2        3
--R   (1)  -- - 8i + - j + k
--R        11        4
--R                                          Type: Quaternion(Fraction(Integer))
--E 1

———-

The four arguments are the real part, the i imaginary part, the j imaginary part and the k imaginary part, respectively. These are extracted with the following functions.

— * —

--S 2 of 25
real q
--R
--R
--R         2
--R   (2)  --
--R        11
--R                                                      Type: Fraction(Integer)
--E 2
--S 3 of 25
imagI q

--R
--R
--R   (3)  - 8
--R                                                      Type: Fraction(Integer)
--E 3
--S 4 of 25
imagJ q
--R
--R
--R        3
--R   (4)  -
--R        4
--R                                                      Type: Fraction(Integer)
--E 4
--S 5 of 25
imagK q
--R
--R
--R   (5)  1
--R                                                      Type: Fraction(Integer)
--E 5

———-

Because q is over the rationals (and nonzero), you can invert it ...

— * —

--S 6 of 25
inv q
--R
--R
--R          352     15488      484       1936
--R   (6)  ------ + ------ i - ----- j - ------ k
--R        126993   126993     42331     126993
--R                                          Type: Quaternion(Fraction(Integer))
--E 6

———-

In addition to the normal arithmetic (ring) operations.

— * —

--S 7 of 25
q**6
--R
--R
--R          2029490709319345   48251690851     144755072553     48251690851
--R   (7)  - ---------------- - ----------- i + ------------ j + ----------- k
--R             7256313856        1288408         41229056         10307264

--R                                          Type: Quaternion(Fraction(Integer))
--E 7
--S 8 of 25
r := quatern(-2,3,23/9,-89)
--R
--R
--R                   23
--R   (8)  - 2 + 3i + -- j - 89k
--R                    9
--R                                          Type: Quaternion(Fraction(Integer))
--E 8
--S 9 of 25
q + r
--R
--R
--R          20        119
--R   (9)  - -- - 5i + --- j - 88k
--R          11         36
--R                                          Type: Quaternion(Fraction(Integer))
--E 9
--S 10 of 25
q - r
--R
--R
--R         24         65
--R   (10)  -- - 11i - -- j + 90k
--R         11         36
--R                                          Type: Quaternion(Fraction(Integer))
--E 10

———-

In general, multiplication is not commutative.

— * —

--S 11 of 25
q * r
--R
--R
--R         14615   20893     140587     16187
--R   (11)  ----- - ----- i - ------ j - ----- k
--R          132     396        198       396
--R                                          Type: Quaternion(Fraction(Integer))
--E 11
--S 12 of 25
r * q

--R
--R
--R         14615   33997     140177     1787
--R   (12)  ----- + ----- i + ------ j + ---- k
--R          132     396        198       396
--R                                          Type: Quaternion(Fraction(Integer))
--E 12

———-

There are no predefined constants for the imaginary i, j and k but you can easily define them.

— * —

--S 13 of 25
i := quatern(0,1,0,0)
--R
--R
--R   (13)  i
--R                                                    Type: Quaternion(Integer)
--E 13
--S 14 of 25
j := quatern(0,0,1,0)
--R
--R
--R   (14)  j
--R                                                    Type: Quaternion(Integer)
--E 14
--S 15 of 25
k := quatern(0,0,0,1)
--R
--R
--R   (15)  k
--R                                                    Type: Quaternion(Integer)
--E 15
--S 16 of 25
i*i
--R
--R
--R   (16)  - 1
--R                                                    Type: Quaternion(Integer)
--E 16
--S 17 of 25
j*j
--R
--R

--R   (17)  - 1
--R                                                    Type: Quaternion(Integer)
--E 17
--S 18 of 25
k*k
--R
--R
--R   (18)  - 1
--R                                                    Type: Quaternion(Integer)
--E 18
--S 19 of 25
i*j
--R
--R
--R   (19)  k
--R                                                    Type: Quaternion(Integer)
--E 19
--S 20 of 25
j*k
--R
--R
--R   (20)  i
--R                                                    Type: Quaternion(Integer)
--E 20
--S 21 of 25
k*i
--R
--R
--R   (21)  j
--R                                                    Type: Quaternion(Integer)
--E 21
--S 22 of 25
q * i
--R
--R
--R              2         3
--R   (22)  8 + -- i + j - - k
--R             11         4
--R                                          Type: Quaternion(Fraction(Integer))
--E 22

———-

The norm is the quaternion times its conjugate — * —

--S 23 of 25
norm q
--R
--R
--R         126993
--R   (23)  ------
--R          1936
--R                                                      Type: Fraction(Integer)
--E 23
--S 24 of 25
conjugate q
--R
--R
--R          2        3
--R   (24)  -- + 8i - - j - k
--R         11        4
--R                                          Type: Quaternion(Fraction(Integer))
--E 24
--S 25 of 25
q * %
--R
--R
--R         126993
--R   (25)  ------
--R          1936
--R                                          Type: Quaternion(Fraction(Integer))
--E 25
)spool
)lisp (bye)

———-

References^{[1] nothing}

9