To cite the jordan
package in publications please use Hankin (2023). Jordan algebras were originally
introduced by Pascual Jordan in 1933 as an attempt to axiomatize
observables in quantum mechanics. Formally, a Jordan algebra is
a non-associative algebra over the reals with a bilinear multiplication
that satisfies the following identities:
xy = yx
(xy)(xx) = x(y(xx))
(the second identity is known as the Jordan identity). In literature,
multiplication is usually indicated by juxtaposition but one sometimes
sees x • y. Package
idiom is to use an asterisk, as in x*y
. Following McCrimmon (1978), there are five types of Jordan
algebras:
real_symmetric_matrix
, abbreviated in the package to
rsm
complex_herm_matrix
, abbreviated to chm
quaternion_herm_matrix
, abbreviated to
qhm
albert
spin
(of course, the first two are special cases of the next). The
jordan
package provides functionality to manipulate jordan
objects using natural R idiom. Objects of all these classes are stored
in matrix form with columns being elements of the jordan algebra. The
first four classes are matrix-based in the sense that the algebraic
objects are symmetric or Hermitian matrices (the S4 class is
jordan_matrix
). The fifth class, spin factors, is not
matrix based.
The four matrix-based Jordan algebras have elements which are square matrices. The first three classes are real (symmetric) matrices, complex (Hermitian) matrices, and quaternionic (Hermitian); type 4 is considered separately at the end. Types 1,2, and 3 all behave in the same way from a package idiom perspective. Consider:
## Vector of real symmetric matrices with entries
## [1] [2] [3]
## [1,] 1.26 -0.41 -0.24
## [2,] -0.33 0.25 -0.54
## [3,] 1.33 -0.89 -0.43
## [4,] 1.27 0.44 -0.65
## [5,] 0.41 -1.24 0.73
## .......................
## [11,] 0.76 0.50 1.76
## [12,] -0.80 1.09 0.56
## [13,] -1.15 -0.69 -0.45
## [14,] -0.29 -1.28 -0.83
## [15,] -0.30 0.05 -1.17
Object x
is a three-element vector, with each element
being a column. Each element corresponds to a 5 × 5 symmetric matrix (because
rrsm()
has d=5
by default, specifying the size
of the matrix). Thus each element has 5 * (5 + 1)/2 = 15 degrees of freedom, as
indicated by the row labelling. Addition and multiplication of a Jordan
object with a scalar are defined:
## Vector of real symmetric matrices with entries
## [1] [2] [3]
## [1,] 126 -41 -24
## [2,] -33 25 -54
## [3,] 133 -89 -43
## [4,] 127 44 -65
## [5,] 41 -124 73
## ....................
## [11,] 76 50 176
## [12,] -80 109 56
## [13,] -115 -69 -45
## [14,] -29 -128 -83
## [15,] -30 5 -117
## Vector of real symmetric matrices with entries
## [1] [2] [3]
## [1,] -1.95 0.67 3.06
## [2,] -5.01 0.22 -0.12
## [3,] 4.81 -3.71 -0.79
## [4,] 3.76 0.08 -3.38
## [5,] -0.28 -3.67 -3.59
## .......................
## [11,] 1.51 0.56 0.50
## [12,] 1.06 1.87 3.56
## [13,] -1.66 -2.64 -1.29
## [14,] -6.95 -1.64 2.95
## [15,] -4.08 2.03 0.78
## Vector of real symmetric matrices with entries
## [1] [2] [3]
## [1,] 101.26 99.59 99.76
## [2,] 99.67 100.25 99.46
## [3,] 101.33 99.11 99.57
## [4,] 101.27 100.44 99.35
## [5,] 100.41 98.76 100.73
## ..........................
## [11,] 100.76 100.50 101.76
## [12,] 99.20 101.09 100.56
## [13,] 98.85 99.31 99.55
## [14,] 99.71 98.72 99.17
## [15,] 99.70 100.05 98.83
(the last line is motivated by analogy with M + x
, for
M
a matrix and x
a scalar). Jordan objects may
be multiplied using the rule x • y = (xy + yx)/2:
## Vector of real symmetric matrices with entries
## [1] [2] [3]
## [1,] 0.76410 -0.73630 0.75020
## [2,] -2.95485 -0.11655 0.69915
## [3,] 0.75970 2.17000 -0.84630
## [4,] -0.74050 -0.61915 0.44255
## [5,] -0.99495 0.58665 -0.43270
## ................................
## [11,] 0.25850 1.06925 2.00600
## [12,] -0.20925 0.17605 -0.78365
## [13,] 1.54600 -1.09150 0.20655
## [14,] -3.00675 -0.94800 -0.24035
## [15,] 0.91130 0.92850 -1.85950
We may verify that the distributive law is obeyed:
## Vector of real symmetric matrices with entries
## [1] [2] [3]
## [1,] 0.000000e+00 0.000000e+00 0.000000e+00
## [2,] 0.000000e+00 -2.220446e-16 3.330669e-16
## [3,] 2.220446e-16 4.440892e-16 0.000000e+00
## [4,] -2.220446e-16 0.000000e+00 0.000000e+00
## [5,] 0.000000e+00 -1.110223e-16 -5.551115e-17
## ...............................................
## [11,] 2.220446e-16 0.000000e+00 -1.110223e-16
## [12,] -6.661338e-16 2.220446e-16 -6.938894e-17
## [13,] -4.440892e-16 -2.220446e-16 4.440892e-16
## [14,] 0.000000e+00 -1.110223e-16 4.440892e-16
## [15,] 4.440892e-16 3.330669e-16 -1.110223e-16
(that is, zero to numerical precision). Further, we may observe that the resulting algebra is not associative:
## Vector of real symmetric matrices with entries
## [1] [2] [3]
## [1,] -2.1017565 -1.19444550 0.7294260
## [2,] 0.9831145 1.50253975 -0.9596110
## [3,] -3.2116185 -0.89286100 -4.1190580
## [4,] 0.2891320 1.10998775 -1.5859828
## [5,] -1.8515115 -0.09683025 -0.8515705
## .......................................
## [11,] -0.2235020 -0.74325575 1.3072258
## [12,] -1.2445235 0.49372175 -0.2215460
## [13,] 0.1555398 0.27185050 -1.4434697
## [14,] -0.2530977 -0.70312400 -0.8658505
## [15,] 2.5612200 -0.15260950 1.8237820
showing numerically that x(yz) ≠ (xy)z. However, the Jordan identity (xy)(xx) = x(y(xx)) is satisfied:
## Vector of real symmetric matrices with entries
## [1] [2] [3]
## [1,] 5.329071e-15 -2.220446e-16 0.000000e+00
## [2,] 0.000000e+00 0.000000e+00 0.000000e+00
## [3,] -8.881784e-16 0.000000e+00 4.718448e-16
## [4,] 2.664535e-15 -4.440892e-16 -1.110223e-15
## [5,] 3.552714e-15 -4.440892e-16 8.881784e-16
## ...............................................
## [11,] 0.000000e+00 0.000000e+00 0.000000e+00
## [12,] 2.664535e-15 6.661338e-16 -8.881784e-16
## [13,] -1.776357e-15 0.000000e+00 1.332268e-15
## [14,] 3.552714e-15 -4.440892e-16 0.000000e+00
## [15,] 0.000000e+00 -8.881784e-16 -3.552714e-15
(the entries are zero to numerical precision). If we wish to work
with the matrix itself, a single element may be coerced with
as.1matrix()
:
## [,1] [,2] [,3] [,4] [,5]
## [1,] -0.41 0.25 0.44 0.38 0.50
## [2,] 0.25 -0.89 -1.24 0.13 1.09
## [3,] 0.44 -1.24 -0.22 0.80 -0.69
## [4,] 0.38 0.13 0.80 -0.06 -1.28
## [5,] 0.50 1.09 -0.69 -1.28 0.05
(in the above, observe how the matrix is indeed symmetric). We may verify that the multiplication rule is indeed being correctly applied:
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0 0 0 0 0
## [2,] 0 0 0 0 0
## [3,] 0 0 0 0 0
## [4,] 0 0 0 0 0
## [5,] 0 0 0 0 0
It is also possible to verify that symmetry is closed under the Jordan operation:
## [,1] [,2] [,3] [,4] [,5]
## [1,] 0 0 0 0 0
## [2,] 0 0 0 0 0
## [3,] 0 0 0 0 0
## [4,] 0 0 0 0 0
## [5,] 0 0 0 0 0
The other matrix-based Jordan algebras are similar but differ in the details of the coercion. Taking quaternionic matrices:
## [1,1] [2,1] [1,2] [2,2]
## Re -0.96 -0.96 -0.96 -1.23
## i 0.00 0.87 -0.87 0.00
## j 0.00 0.91 -0.91 0.00
## k 0.00 -0.74 0.74 0.00
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
above we see the matrix functionality of the onion
package being used. See how the matrix is Hermitian (elements
[1,2]
and [2,1]
are conjugate; elements
[1,1]
and [2,2]
are pure real). Verifying the
Jordan identity would be almost the same as above:
## Vector of quaternionic Hermitian matrices with entries
## [1] [2] [3]
## [1,] 3.552714e-15 1.421085e-14 0.000000e+00
## [2,] -2.131628e-14 1.421085e-14 3.552714e-15
## [3,] 0.000000e+00 0.000000e+00 0.000000e+00
## [4,] 5.329071e-15 -2.664535e-15 -7.105427e-15
## [5,] 0.000000e+00 0.000000e+00 2.842171e-14
## ...............................................
## [41,] 8.437695e-15 8.881784e-15 0.000000e+00
## [42,] -1.421085e-14 0.000000e+00 5.329071e-15
## [43,] -7.105427e-15 1.421085e-14 8.881784e-15
## [44,] -3.552714e-15 -7.105427e-15 0.000000e+00
## [45,] -1.421085e-14 0.000000e+00 7.105427e-15
Above, we see that the difference is very small.
The first four types of Jordan algebras are all matrix-based with either real, complex, quaternionic, or octonionic entries.
The fifth type, spin factors, are slightly different from a package idiom perspective. Mathematically, elements are of the form ℝ ⊕ ℝn, with addition and multiplication defined by
α(a, a) = (αa, αa)
(a, a) + (b, b) = (a + b, a + b)
(a, a) × (b, b) = (ab + ⟨a, b⟩, ab + ba)
where a, b, α ∈ ℝ, and a, b ∈ ℝn. Here ⟨⋅, ⋅⟩ is an inner product defined on ℝn (by default we have ⟨(x1, …, xn), (y1, …, yn)⟩ = ∑xiyi but this is configurable in the package).
So if we have ℐ, 𝒥, 𝒦 spin factor elements it is clear that ℐ𝒥 = 𝒥ℐ and ℐ(𝒥 + 𝒦) = ℐ𝒥 + ℐ𝒦. The Jordan identity is not as easy to see but we may verify all the identities numerically:
## Vector of spin objects with entries
## [1] [2] [3]
## r 0.14 0.91 -1.80
## [1] -0.34 1.14 0.37
## [2] 0.61 0.01 -0.38
## [3] 1.34 -1.11 0.65
## [4] 0.77 -0.03 2.06
## [5] 0.19 -0.16 -1.80
## Vector of spin objects with entries
## [1] [2] [3]
## r 0 0 0
## [1] 0 0 0
## [2] 0 0 0
## [3] 0 0 0
## [4] 0 0 0
## [5] 0 0 0
## Vector of spin objects with entries
## [1] [2] [3]
## r 4.440892e-16 0.000000e+00 1.776357e-15
## [1] 5.551115e-17 -8.881784e-16 0.000000e+00
## [2] 1.110223e-16 0.000000e+00 0.000000e+00
## [3] 4.440892e-16 -2.220446e-16 0.000000e+00
## [4] 2.220446e-16 4.440892e-16 0.000000e+00
## [5] 2.775558e-17 4.440892e-16 0.000000e+00
## Vector of spin objects with entries
## [1] [2] [3]
## r -2.220446e-16 -4.440892e-16 0.000000
## [1] -3.900790e-01 -1.625974e+00 -1.756489
## [2] 8.775930e-01 8.771170e-01 -5.327674
## [3] 2.349792e+00 -1.888707e+00 5.749035
## [4] 1.525986e+00 -1.707510e-01 3.378938
## [5] 4.767830e-01 5.984960e-01 -3.509500
## Vector of spin objects with entries
## [1] [2] [3]
## r 6.661338e-16 0.000000e+00 0.000000e+00
## [1] -2.220446e-16 0.000000e+00 0.000000e+00
## [2] 0.000000e+00 8.881784e-16 -1.776357e-15
## [3] 4.440892e-16 0.000000e+00 0.000000e+00
## [4] 2.220446e-16 -8.881784e-16 0.000000e+00
## [5] 0.000000e+00 0.000000e+00 1.421085e-14
Type 4 Jordan algebra corresponds to 3 × 3 Hermitian matrices with octonions for
entries. This is class albert
in the package. Note that
octonionic Hermitian matrices of order 4 or above do not satisfy the
Jordan identity and are therefore not Jordan algebras: there is a
numerical illustration of this fact in the onion
package
vignette. We may verify the Jordan identity for 3 × 3 octonionic Hermitian matrices using
package class albert
:
## Vector of Albert matrices with entries
## [1] [2] [3]
## d1 -0.18 -0.26 0.03
## d2 1.45 -0.06 -1.03
## d3 -0.61 -0.45 -0.98
## Re(o1) 0.68 0.07 0.00
## i(o1) -0.09 -0.15 -0.23
## j(o1) -0.49 -0.83 -0.50
## k(o1) 1.41 0.76 1.55
## l(o1) -0.22 -0.58 0.09
## il(o1) -0.21 -0.63 1.32
## jl(o1) 0.70 0.48 -0.98
## kl(o1) 0.92 1.70 -0.25
## Re(o2) -0.92 -1.76 -1.40
## i(o2) 1.15 0.20 1.44
## j(o2) -0.64 0.40 -0.98
## k(o2) -0.89 0.03 1.47
## l(o2) -2.33 2.56 -0.99
## il(o2) -0.15 1.26 -0.09
## jl(o2) 0.32 -0.53 -2.88
## kl(o2) -0.71 -0.63 -0.25
## Re(o3) 1.24 0.91 0.01
## i(o3) 0.62 1.01 -1.92
## j(o3) 0.10 0.72 -0.29
## k(o3) 1.81 -0.60 -0.35
## l(o3) -1.50 0.54 -1.84
## il(o3) 0.29 -0.08 0.90
## jl(o3) 0.85 1.85 -1.21
## kl(o3) -1.00 -0.85 -0.22
## Vector of Albert matrices with entries
## [1] [2] [3]
## d1 1.421085e-14 -7.105427e-15 0.000000e+00
## d2 1.421085e-14 -1.421085e-14 0.000000e+00
## d3 2.842171e-14 1.421085e-14 0.000000e+00
## Re(o1) -1.776357e-15 8.881784e-16 2.131628e-14
## i(o1) -7.105427e-15 -1.065814e-14 1.421085e-14
## j(o1) 7.105427e-15 3.552714e-15 7.105427e-15
## k(o1) 0.000000e+00 0.000000e+00 -7.105427e-15
## l(o1) 7.105427e-15 0.000000e+00 5.329071e-15
## il(o1) 7.105427e-15 -3.552714e-15 -1.421085e-14
## jl(o1) 0.000000e+00 -7.105427e-15 -7.105427e-15
## kl(o1) -7.105427e-15 -1.421085e-14 -1.421085e-14
## Re(o2) 1.065814e-14 -1.421085e-14 0.000000e+00
## i(o2) 0.000000e+00 -7.105427e-15 -7.105427e-15
## j(o2) 0.000000e+00 0.000000e+00 1.421085e-14
## k(o2) 1.421085e-14 -8.881784e-16 -2.842171e-14
## l(o2) -7.105427e-15 0.000000e+00 -7.105427e-15
## il(o2) -7.105427e-15 0.000000e+00 0.000000e+00
## jl(o2) -3.552714e-15 -3.552714e-15 -1.421085e-14
## kl(o2) 3.552714e-15 1.776357e-15 9.769963e-15
## Re(o3) 3.552714e-15 0.000000e+00 -1.421085e-14
## i(o3) -1.065814e-14 1.065814e-14 2.842171e-14
## j(o3) -3.552714e-15 0.000000e+00 -7.105427e-15
## k(o3) -5.107026e-15 -3.552714e-15 -7.105427e-15
## l(o3) 8.881784e-15 1.421085e-14 -7.105427e-15
## il(o3) 1.776357e-14 -7.105427e-15 -1.421085e-14
## jl(o3) 0.000000e+00 0.000000e+00 1.421085e-14
## kl(o3) 7.105427e-15 0.000000e+00 -1.065814e-14
In 1963, C. M. Glennie discovered a pair of identities satisfied by special Jordan algebras but not the Albert algebra. Defining
Ux(y) = 2x(xy) − (xx)y
{x, y, z} = 2(x(yz) + (xy)z − (xz)y)
(it can be shown that Jacobson’s identity UUx(y) = UxUyUx holds), Glennie’s identities are
H8(x, y, z) = H8(y, x, z) H9(x, y, z) = H9(y, x, z)
(see McCrimmon 2004 for details), where
H8(x, y, z) = {UxUy(z), z, xy} − UxUyUz(xy)
and H9(x, y, z) = 2Ux(z)Uy, xUz(yy) − UxUzUx, yUy(z)
We may verify Jacobson’s identity:
U <- function(x){function(y){2*x*(x*y)-(x*x)*y}}
diff <- function(x,y,z){
LHS <- U(x)(U(y)(U(x)(z)))
RHS <- U(U(x)(y))(z)
return(LHS-RHS) # zero if Jacobson holds
}
Then we may numerically verify Jacobson for type 3-5 Jordan algebras:
## Vector of Albert matrices with entries
## [1] [2] [3]
## d1 4.547474e-13 2.273737e-13 1.818989e-12
## d2 7.958079e-13 1.591616e-12 0.000000e+00
## d3 1.250555e-12 -4.547474e-13 3.637979e-12
## Re(o1) -1.136868e-13 -1.364242e-12 4.547474e-13
## i(o1) -4.547474e-13 -2.273737e-13 -1.818989e-12
## j(o1) -3.410605e-13 2.273737e-13 1.591616e-12
## k(o1) -5.115908e-13 0.000000e+00 -1.364242e-12
## l(o1) 2.273737e-13 -1.136868e-13 0.000000e+00
## il(o1) 5.684342e-13 -4.547474e-13 9.094947e-13
## jl(o1) -9.094947e-13 7.105427e-13 -1.364242e-12
## kl(o1) -6.821210e-13 -6.252776e-13 -1.818989e-12
## Re(o2) 1.136868e-13 0.000000e+00 -9.094947e-13
## i(o2) 4.547474e-13 7.958079e-13 0.000000e+00
## j(o2) 2.273737e-13 -1.136868e-13 -1.818989e-12
## k(o2) 1.136868e-13 3.410605e-13 4.092726e-12
## l(o2) 1.136868e-13 2.273737e-13 4.547474e-12
## il(o2) 2.273737e-13 -2.273737e-13 1.932676e-12
## jl(o2) 1.136868e-13 6.821210e-13 -4.547474e-13
## kl(o2) 2.273737e-13 2.273737e-13 -6.821210e-13
## Re(o3) -2.273737e-13 2.273737e-13 9.094947e-13
## i(o3) -7.105427e-15 -9.094947e-13 -1.818989e-12
## j(o3) -1.136868e-12 0.000000e+00 4.547474e-13
## k(o3) -4.547474e-13 -4.547474e-13 4.547474e-13
## l(o3) 1.364242e-12 -1.136868e-13 4.547474e-13
## il(o3) 5.684342e-13 -3.410605e-13 -9.094947e-13
## jl(o3) 0.000000e+00 -5.684342e-13 -1.136868e-12
## kl(o3) 1.136868e-13 -1.136868e-13 0.000000e+00
## Vector of quaternionic Hermitian matrices with entries
## [1] [2] [3]
## [1,] 2.728484e-12 -3.183231e-12 -4.547474e-12
## [2,] 4.774847e-12 2.728484e-12 -4.547474e-12
## [3,] 0.000000e+00 -5.911716e-12 -5.911716e-12
## [4,] 1.818989e-12 -2.728484e-12 -7.275958e-12
## [5,] -3.637979e-12 -5.456968e-12 -9.094947e-13
## ...............................................
## [41,] 1.364242e-12 4.092726e-12 -9.094947e-13
## [42,] 3.637979e-12 1.818989e-12 0.000000e+00
## [43,] -1.818989e-12 1.818989e-12 -9.094947e-13
## [44,] 2.273737e-13 -1.364242e-12 3.183231e-12
## [45,] -1.818989e-12 1.818989e-12 4.547474e-12
## Vector of spin objects with entries
## [1] [2] [3]
## r 1.421085e-14 -5.151435e-14 0.000000e+00
## [1] -7.105427e-15 2.131628e-14 2.273737e-13
## [2] 0.000000e+00 -3.552714e-15 -1.136868e-13
## [3] 7.105427e-15 1.998401e-14 1.136868e-13
## [4] 0.000000e+00 5.329071e-15 2.131628e-13
## [5] 0.000000e+00 -7.105427e-15 -5.684342e-14
showing agreement to numerical accuracy (the output is close to zero). We can now verify Glennie’s G8 and G9 identities.
B <- function(x,y,z){2*(x*(y*z) + (x*y)*z - (x*z)*y)} # bracket function
H8 <- function(x,y,z){B(U(x)(U(y)(z)),z,x*y) - U(x)(U(y)(U(z)(x*y)))}
G8 <- function(x,y,z){H8(x,y,z)-H8(y,x,z)}
and so we verify for type 3 and type 5 Jordans:
## Vector of quaternionic Hermitian matrices with entries
## [1]
## [1,] 0.000000e+00
## [2,] 4.547474e-13
## [3,] -5.456968e-12
## [4,] -9.094947e-13
## [5,] 2.182787e-11
## ...................
## [41,] -1.818989e-11
## [42,] -5.456968e-12
## [43,] 4.547474e-12
## [44,] -1.818989e-12
## [45,] -1.455192e-11
## Vector of spin objects with entries
## a
## r -7.105427e-15
## [1] 0.000000e+00
## [2] -7.105427e-15
## [3] -7.105427e-15
## [4] -1.421085e-14
## [5] 2.842171e-14
again showing acceptable accuracy. The identity is not true for Albert algebras:
## Vector of Albert matrices with entries
## [1]
## d1 -3548.756
## d2 4725.027
## d3 -1176.271
## Re(o1) -9656.596
## i(o1) 2084.501
## j(o1) -3042.062
## k(o1) -11955.928
## l(o1) 9874.819
## il(o1) 13939.995
## jl(o1) 2402.327
## kl(o1) 10258.985
## Re(o2) -1897.960
## i(o2) -18147.457
## j(o2) -9749.166
## k(o2) -5105.221
## l(o2) 9852.301
## il(o2) -19952.518
## jl(o2) -8786.434
## kl(o2) -5976.901
## Re(o3) 12797.129
## i(o3) -5849.865
## j(o3) -11008.285
## k(o3) -6832.751
## l(o3) 12261.710
## il(o3) 5024.401
## jl(o3) -12186.564
## kl(o3) -637.169
L <- function(x){function(y){x*y}}
U <- function(x){function(y){2*x*(x*y)-(x*x)*y}}
U2 <- function(x,y){function(z){L(x)(L(y)(z)) + L(y)(L(x)(z)) - L(x*y)(z)}}
H9 <- function(x,y,z){2*U(x)(z)*U2(y,x)(U(z)(y*y)) - U(x)(U(z)(U2(x,y)(U(y)(z))))}
G9 <- function(x,y,z){H9(x,y,z)-H9(y,x,z)}
Then we may verify the G9()
identity for type 3
Jordans:
## Vector of quaternionic Hermitian matrices with entries
## [1]
## [1,] 1.164153e-10
## [2,] 2.037268e-10
## [3,] -1.455192e-10
## [4,] 2.619345e-10
## [5,] 2.328306e-10
## ...................
## [41,] -5.820766e-11
## [42,] 0.000000e+00
## [43,] 8.731149e-11
## [44,] -4.365575e-11
## [45,] -1.455192e-10
However, the Albert algebra does not satisfy the identity:
## Vector of Albert matrices with entries
## [1]
## d1 -7266.86356
## d2 -8376.22006
## d3 -176129.29514
## Re(o1) 63698.82453
## i(o1) -113610.70700
## j(o1) 18397.47508
## k(o1) -18360.14034
## l(o1) -53650.05517
## il(o1) 1693.22231
## jl(o1) 39312.82572
## kl(o1) 17003.00532
## Re(o2) -43832.17576
## i(o2) 15565.01374
## j(o2) -15984.80486
## k(o2) -5800.22870
## l(o2) -39014.58190
## il(o2) -53929.49807
## jl(o2) -47641.08428
## kl(o2) 7133.31837
## Re(o3) 12983.12738
## i(o3) -32369.08213
## j(o3) -85.85214
## k(o3) 997.06029
## l(o3) 44319.51887
## il(o3) -32342.86674
## jl(o3) 46682.35665
## kl(o3) 40460.20737