jhypercomplex.multiplication_tables
Class OctonionMultiplicationTable

java.lang.Object
  extended by jhypercomplex.multiplication_tables.MultiplicationTable
      extended by jhypercomplex.multiplication_tables.OctonionMultiplicationTable

public class OctonionMultiplicationTable
extends MultiplicationTable

Author:
Markus Maute (http://www.markus-maute.com) Allows to generate the 480 different multiplication tables of the octonions. Unlike the quaternions which have 3 imaginary units that allow only to construct 2 different bases, namely a left-handed and a right-handed one, the octonions, which have 7 imaginary units allow the construction of 480 different bases corresponding to 480 different handednesses. (Remark: In three dimensions one has 2 different cross-products, in 7 dimensions, the only higher dimension where a cross-product exists, one has 480 different cross-products). The following construction - which is admittedly quite brute force - goes as follows: We construct the multiplication table step by step. In the first step we have maximal freedom in the choice of the resulting base vector when multiplying two base vectors: E.g. i*j = {k,E,I,J,K}, i.e. all five other base vectors are allowed. In addition we can in each case choose a positive or negative sign for the result. Altogether we get 2*5 = 10 possibilities. This defines the first "octonion-cycle" as the three elements form a sub-algebra (isomorphic to the imaginary quaternion-algebra): I.e. i*j = k; j*i = -k; j*k = i; k*j = -i; i*k = -j; k*i = j; The imaginary part of the multiplication table consists of 49 entries of which the 7 on the diagonal are fixed by the given metric, i.e. (-1,-1,-1,-1,-1,-1,-1) for the ordinary octonions. The 42 off-diagonal elements are constituted by the results of 7 "octonion-cyles", each contributing 6 of them (analogous to the cycle mentioned above). What makes the construction as carried out in this program quite tedious is the fact, that the 7 cycles are not independent. For each further cycle one constructs one has to consider constraints imposed by the cycles already defined. This is where the whole thing gets a bit "ad hoc" and error-prone. However the results look quite reasonable, have stood several consistency checks (see JUnit tests) and are in agreement with several different multiplication tables found in literature. The overall number of 480 different bases can be calculated as follows (the first number being the number of possible choices of the base vector, the second one of the sign): cycle 1: 5*2 cycle 2: 3*2 cycle 3: 2*2 cycle 4: 1*2 cycle 5: 1*1 cycle 6: 1*1 cycle 7: 1*1 ==> 480 = (5*3)*(3*2)*(2*2)*(1*2)*(1*1)*(1*1)*(1*1)

Constructor Summary
OctonionMultiplicationTable()
           
OctonionMultiplicationTable(java.lang.String[] basis)
           
OctonionMultiplicationTable(java.lang.String sign1, int base_vect1, java.lang.String sign2, int base_vect2, java.lang.String sign3, int base_vect3, java.lang.String sign4)
           
OctonionMultiplicationTable(java.lang.String basename1, java.lang.String basename2, java.lang.String basename3, java.lang.String basename4, java.lang.String basename5, java.lang.String basename6, java.lang.String basename7, java.lang.String basename8)
           
 
Method Summary
 SevenPointsSTS getAllCyclesUnsigned()
           
 java.lang.String[] getBasis()
           
 java.lang.String[] getCycle(int n)
           
 java.lang.String getNormedHTMLTable()
           
 java.lang.String getTableAsHTML()
           
 java.lang.String setCycle1(java.lang.String sign, int base_vec_nr)
          Sets the first octonion cycle.
 java.lang.String setCycle2(java.lang.String sign, int base_vec_nr)
          Sets the second octonion cycle.
 java.lang.String setCycle3(java.lang.String sign, int base_vec_nr)
          Sets the third octonion cycle.
 java.lang.String setCycle4(java.lang.String sign)
          Sets the fourth octonion cycle.
 void setCycles(java.lang.String sign1, int base_vect1, java.lang.String sign2, int base_vect2, java.lang.String sign3, int base_vect3, java.lang.String sign4)
          Creates the 7 quaternion cycles with the data specified.
 void setFanoPlane(int base_vect1, int base_vect2, int base_vect3)
           
 java.lang.String setType(int nr)
          Sets the n-th multiplication table.
 java.lang.String traceCycles()
           
 
Methods inherited from class jhypercomplex.multiplication_tables.MultiplicationTable
getComparisonTable, getCopy, getDeterminant2, getMultTableAsArray, getMultTableAsHtml, getMultTableAsHtml, getMultTableAsHtml, getMultTableAsHtml, getMultTableListAsHtml, getMultTableStringDelimited, getMultTableStringDelimited, getNormedMultiplicationTable, getNormedMultiplicationTable, getNormedMultTableStringDelimited, getSignTable, getSignTable, getSignTableAsHtml, getSignTableAsHtml, getSignTableStringDelimited, getSize, getTableView, getUnsignedMultTableStringDelimited, getUnsignedTable, getUnsignedTable, isAntiSymmetrical, isEqualTables, isFanoPlane, swapColumns, swapRows
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

OctonionMultiplicationTable

public OctonionMultiplicationTable()

OctonionMultiplicationTable

public OctonionMultiplicationTable(java.lang.String[] basis)

OctonionMultiplicationTable

public OctonionMultiplicationTable(java.lang.String basename1,
                                   java.lang.String basename2,
                                   java.lang.String basename3,
                                   java.lang.String basename4,
                                   java.lang.String basename5,
                                   java.lang.String basename6,
                                   java.lang.String basename7,
                                   java.lang.String basename8)

OctonionMultiplicationTable

public OctonionMultiplicationTable(java.lang.String sign1,
                                   int base_vect1,
                                   java.lang.String sign2,
                                   int base_vect2,
                                   java.lang.String sign3,
                                   int base_vect3,
                                   java.lang.String sign4)
Method Detail

setCycle1

public java.lang.String setCycle1(java.lang.String sign,
                                  int base_vec_nr)
Sets the first octonion cycle.

Parameters:
sign - "+" or "-".
base_vec_nr - 1,2,3,4 or 5.
Returns:
null if parameters are correct, an error description if not.

setCycle2

public java.lang.String setCycle2(java.lang.String sign,
                                  int base_vec_nr)
Sets the second octonion cycle.

Parameters:
sign - "+" or "-".
base_vec_nr - 1, 2 or 3.
Returns:
null if parameters are correct, an error description if not.

setCycle3

public java.lang.String setCycle3(java.lang.String sign,
                                  int base_vec_nr)
Sets the third octonion cycle.

Parameters:
sign - "+" or "-".
base_vec_nr - 1 or 2.
Returns:
null if parameters are correct, an error description if not.

setCycle4

public java.lang.String setCycle4(java.lang.String sign)
Sets the fourth octonion cycle.

Parameters:
sign - "+" or "-".
Returns:
null if parameters are correct, an error description if not.

setFanoPlane

public void setFanoPlane(int base_vect1,
                         int base_vect2,
                         int base_vect3)

setCycles

public void setCycles(java.lang.String sign1,
                      int base_vect1,
                      java.lang.String sign2,
                      int base_vect2,
                      java.lang.String sign3,
                      int base_vect3,
                      java.lang.String sign4)
Creates the 7 quaternion cycles with the data specified.

Parameters:
sing1 - "+" or "-" sign of the result of the multiplication of the first quaternion cycle.
base_vect1 - "+"- or "-" sign of the result of the multiplication of the first quaternion cycle.
sing2 - dtTODO ..
base_vect2 -
sing3 -
base_vect3 -
sing4 -

setType

public java.lang.String setType(int nr)
                         throws java.lang.Exception
Sets the n-th multiplication table. The numbering is defined ad hoc as follows: Start, n = 1: setCycles ("+",1,"+","1","+","1","+") The signs are rotated in the inner loop: (+,+,+,+), (-,+,+,+), (+,-,+,+), ... (-,-,+,+), (-,+,-,+), ... (-,-,-,-). The numbers are rotated in the outer loop: (1,1,1) ... (5,3,2).

Parameters:
nr - Number of multiplication table in the range 1...480;
Throws:
java.lang.Exception

getAllCyclesUnsigned

public SevenPointsSTS getAllCyclesUnsigned()
                                    throws java.lang.Exception
Throws:
java.lang.Exception

getCycle

public java.lang.String[] getCycle(int n)

getTableAsHTML

public java.lang.String getTableAsHTML()

getNormedHTMLTable

public java.lang.String getNormedHTMLTable()

traceCycles

public java.lang.String traceCycles()

getBasis

public java.lang.String[] getBasis()