The quaternions are an extension to the real (and complex) numbers. See this article.
This module provides the SimpleQuaternion type. To create the quaternion
a + bi + cj + dk use SimpleQuaternion(a,b,c,d) or, alternatively
a + b*im + c*jm + d*km.
Note that im is the usual Julia representation for i; this module adds jm
and km. Thus, the expression 1+im yields a Complex value, but 1+jm yields
a SimpleQuaternion.
Some examples:
julia> a = 3im - 4 + km
-4 + 3im + 0jm + 1km
julia> get_parts(a)
(-4, 3, 0, 1)
julia> real(a) # Return the real part of a
-4
julia> isreal(a)
false
julia> a' # return the conjugate of a
-4 - 3im + 0jm - 1km
julia> b = 1 - 4im + jm
1 - 4im + 1jm + 0km
julia> a+b
-3 - 1im + 1jm + 1km
julia> a-b
-5 + 7im - 1jm + 1km
julia> a*b
8 + 18im - 8jm + 4km
julia> inv(a)
-0.15384615384615385 - 0.11538461538461539im + 0.0jm - 0.038461538461538464km
julia> 1//a
-2//13 - 3//26im + 0//1jm - 1//26km
julia> a/b
-0.8888888888888888 - 0.6666666666666666im + 0.4444444444444444jm - 0.1111111111111111km
julia> a//b
-8//9 - 2//3im + 4//9jm - 1//9km
julia> im*jm == km
true
julia> jm*im == -km
true
julia> im*im == jm*jm == km*km == -1
trueQuaternions can be represented by 4-by-4 real matrices or by 2-by-2 complex matrices.
The functions real_matrix and complex_matrix produce these.
julia> a = 3im-4 + km
-4 + 3im + 0jm + 1km
julia> isreal(a)
false
julia> a = 3im-4 + km^C
julia> a = 3im - 4 + km
-4 + 3im + 0jm + 1km
julia> get_parts(a)
(-4, 3, 0, 1)
julia> b = SimpleQuaternion(-8,0,2,6)^C
julia> b = 1 - 4im + jm
1 - 4im + 1jm + 0km
julia> a = 3im - 4 + km
-4 + 3im + 0jm + 1km
julia> b = 1 - 4im + jm
1 - 4im + 1jm + 0km
julia> A = real_matrix(a); B = real_matrix(b)
4×4 Array{Int64,2}:
1 4 -1 0
-4 1 0 1
1 0 1 4
0 -1 -4 1
julia> A*B == real_matrix(a*b)
true
julia> A = complex_matrix(a); B = complex_matrix(b)
2×2 Array{Complex{Int64},2}:
1-4im 1+0im
-1+0im 1+4im
julia> A*B == complex_matrix(a*b)
true
After either A = real_matrix(x) or A = complex_matrix(x) we can use
SimpleQuaternion(A) to recover x. If A is not a valid matrix, an
error is thrown.
Use rand(SimpleQuaternion) to yield a random quaternion each of whose
four components is a uniform [0,1] random value.
Use randn(SimpleQuaternion) to yield a random quaternion each of whose
four components is a standard normal random value.