# onion v1.5-0

0

0th

Percentile

## Octonions and Quaternions

Quaternions and Octonions are four- and eight- dimensional extensions of the complex numbers. They are normed division algebras over the real numbers and find applications in spatial rotations (quaternions), and string theory and relativity (octonions). The quaternions are noncommutative and the octonions nonassociative. See the package vignette for more details.

# Overview

The onion package provides functionality for working with quaternions and octonions in R. A detailed vignette is provided in the package.

Informally, the quaternions, usually denoted $\mathbb{H}$, are a generalization of the complex numbers represented as a four-dimensional vector space over the reals. An arbitrary quaternion $q$ represented as

$q=a + b\mathbf{i} + c\mathbf{j}+ d\mathbf{k}$

where $a,b,c,d\in\mathbb{R}$ and $\mathbf{i},\mathbf{j},\mathbf{k}$ are the quaternion units linked by the equations

$\mathbf{i}^2= \mathbf{j}^2= \mathbf{k}^2= \mathbf{i}\mathbf{j}\mathbf{k}=-1.$

which, together with distributivity, define quaternion multiplication. We can see that the quaternions are not commutative, for while $\mathbf{i}\mathbf{j}=\mathbf{k}$, it is easy to show that $\mathbf{j}\mathbf{i}=-\mathbf{k}$. Quaternion multiplication is, however, associative (the proof is messy and long).

Defining

$\left( a+b\mathbf{i} + c\mathbf{j}+ d\mathbf{k}\right)^{-1}= \frac{1}{a^2 + b^2 + c^2 + d^2} \left(a-b\mathbf{i} - c\mathbf{j}- d\mathbf{k}\right)$

shows that the quaternions are a division algebra: division works as expected (although one has to be careful about ordering terms).

The octonions $\mathbb{O}$ are essentially a pair of quaternions, with a general octonion written

$a+b\mathbf{i}+c\mathbf{j}+d\mathbf{k}+e\mathbf{l}+f\mathbf{il}+g\mathbf{jl}+h\mathbf{kl}$

(other notations are sometimes used); Baez gives a multiplication table for the unit octonions and together with distributivity we have a well-defined division algebra. However, octonion multiplication is not associative and we have $x(yz)\neq (xy)z$ in general.

# Installation

You can install the released version of onion from CRAN with:

# install.packages("onion")  # uncomment this to install the package
library("onion")


# The onion package in use

The basic quaternions are denoted H1, Hi, Hj and Hk and these should behave as expected in R idiom:

a <- 1:9 + Hi -2*Hj
a
#>    [1] [2] [3] [4] [5] [6] [7] [8] [9]
#> Re   1   2   3   4   5   6   7   8   9
#> i    1   1   1   1   1   1   1   1   1
#> j   -2  -2  -2  -2  -2  -2  -2  -2  -2
#> k    0   0   0   0   0   0   0   0   0
a*Hk
#>    [1] [2] [3] [4] [5] [6] [7] [8] [9]
#> Re   0   0   0   0   0   0   0   0   0
#> i   -2  -2  -2  -2  -2  -2  -2  -2  -2
#> j   -1  -1  -1  -1  -1  -1  -1  -1  -1
#> k    1   2   3   4   5   6   7   8   9
Hk*a
#>    [1] [2] [3] [4] [5] [6] [7] [8] [9]
#> Re   0   0   0   0   0   0   0   0   0
#> i    2   2   2   2   2   2   2   2   2
#> j    1   1   1   1   1   1   1   1   1
#> k    1   2   3   4   5   6   7   8   9


Function rquat() generates random quaternions:

a <- rquat(9)
names(a) <- letters[1:9]
a
#>             a          b            c          d          e          f
#> Re  1.2629543  0.4146414 -0.005767173 -1.1476570  0.2522234 -0.2242679
#> i  -0.3262334 -1.5399500  2.404653389 -0.2894616 -0.8919211  0.3773956
#> j   1.3297993 -0.9285670  0.763593461 -0.2992151  0.4356833  0.1333364
#> k   1.2724293 -0.2947204 -0.799009249 -0.4115108 -1.2375384  0.8041895
#>              g           h          i
#> Re -0.05710677 -1.28459935 -0.4333103
#> i   0.50360797  0.04672617 -0.6494716
#> j   1.08576936 -0.23570656  0.7267507
#> k  -0.69095384 -0.54288826  1.1519118
a[6] <- 33
a
#>             a          b            c          d          e  f           g
#> Re  1.2629543  0.4146414 -0.005767173 -1.1476570  0.2522234 33 -0.05710677
#> i  -0.3262334 -1.5399500  2.404653389 -0.2894616 -0.8919211  0  0.50360797
#> j   1.3297993 -0.9285670  0.763593461 -0.2992151  0.4356833  0  1.08576936
#> k   1.2724293 -0.2947204 -0.799009249 -0.4115108 -1.2375384  0 -0.69095384
#>              h          i
#> Re -1.28459935 -0.4333103
#> i   0.04672617 -0.6494716
#> j  -0.23570656  0.7267507
#> k  -0.54288826  1.1519118
cumsum(a)
#>             a          b         c          d          e          f          g
#> Re  1.2629543  1.6775957 1.6718285  0.5241715  0.7763950 33.7763950 33.7192882
#> i  -0.3262334 -1.8661834 0.5384700  0.2490084 -0.6429127 -0.6429127 -0.1393047
#> j   1.3297993  0.4012322 1.1648257  0.8656106  1.3012939  1.3012939  2.3870632
#> k   1.2724293  0.9777089 0.1786996 -0.2328112 -1.4703496 -1.4703496 -2.1613035
#>              h          i
#> Re 32.43468886 32.0013785
#> i  -0.09257857 -0.7420502
#> j   2.15135668  2.8781074
#> k  -2.70419172 -1.5522800


## Octonions

Octonions follow the same general pattern and we may show nonassociativity numerically:

x <- roct(5)
y <- roct(5)
z <- roct(5)
x*(y*z) - (x*y)*z
#>          [1]           [2]           [3]           [4]           [5]
#> Re  0.000000 -5.329071e-15 -1.776357e-15 -8.881784e-16  8.881784e-16
#> i   7.201225  1.045435e+00 -3.015861e+00 -4.261327e+00  8.612680e+00
#> j   6.177845 -5.797569e+00 -5.642415e+00 -6.342342e+00  1.118819e+01
#> k  -4.917863 -4.484153e+00 -1.591524e+01 -1.119394e+00  1.571936e+01
#> l  -1.403122  1.827970e-01  7.268523e+00 -6.298392e-01 -3.564195e+00
#> il -4.950594  4.440918e+00  9.922722e+00 -7.116999e-01  7.448039e+00
#> jl  5.253879  9.239258e+00  7.195855e+00  4.224830e+00 -4.883673e+00
#> kl -2.031907  1.159402e+01 -1.147093e+01 -1.264476e+00 -2.728531e+00


# References

• RKS Hankin (2006). “Normed division algebras with R: introducing the onion package”. R News, 6(2):49-52
• JC Baez (2001). “The octonions”. Bulletin of the American Mathematical Society, 39(5), 145–205

# Further information

For more detail, see the package vignette

vignette("onionpaper")

## Functions in onion

 Name Description Math Various logarithmic and circular functions for onions Complex Complex functionality for onions O1 Unit onions Logic Logical operations on onions Arith Methods for Function Arith in package Onion bind Binding of onionmats bunny The Stanford Bunny cumsum Cumulative sums and products of onions sum Various summary statistics for onions onionmat Onionic matrices Compare-methods Methods for compare S4 group biggest Returns the biggest type of a set of onions length Length of an octonionic vector threeform Various non-field diagnostics orthogonal Orthogonal matrix equivalents names Names of an onionic vector c Concatenation roct Random onionic vector Extract Extract or Replace Parts of onions or glubs condense Condense an onionic vector into a short form onion-package onion rotate Rotates 3D vectors using quaternions prods Various products of two onions rep Replicate elements of onionic vectors onion Basic onion functions p3d Three dimensional plotting onion-class Class “onion” plot Plot onions zapsmall Concatenation seq seq method for onions show Print method for onions No Results!