First, install Grassmann.jl
for develpment(whenever the code has changed, it will be reflected):
# Enter any where you like to clone Grassmann.jl
cd ~/projects
git clone https://github.com/chakravala/Grassmann.jl
julia
# Enter Pkg REPL-mode
# By hitting ]
add PyCall
dev ~/projects/Grassmann.jl
In [1]:
using Reduce,Grassmann
In [2]:
ℝ^3 == V"+++" == VectorSpace(3)
Out[2]:
In [3]:
V = ℝ'⊕ℝ^3
Out[3]:
In [4]:
V'
Out[4]:
In [5]:
W = V⊕V'
Out[5]:
In [6]:
collect(V)
Out[6]:
In [7]:
collect(V')
Out[7]:
In [8]:
collect(W)
Out[8]:
In [9]:
@basis ℝ'⊕ℝ^3 # equivalent to basis"-+++"
Out[9]:
In [10]:
V # Minkowski spacetime
Out[10]:
In [11]:
typeof(V) # dispatch by vector space
Out[11]:
In [12]:
typeof(v13) # extensive type info
Out[12]:
In [13]:
v13∧v2 # exterior tensor product
Out[13]:
In [14]:
ans^2 # applies geometric product
Out[14]:
In [15]:
using BenchmarkTools
In [16]:
@btime h = 2v1+v3 # vector element
Out[16]:
In [17]:
h = 2v1+v3
Out[17]:
In [18]:
@btime h⋅h # inner product
Out[18]:
In [19]:
@basis "++++" S b;
In [20]:
let k = (b1+b2)-b3
for j ∈ 1:9
k = k*(b234+b134)
println(k)
end end
In [21]:
G3 = Λ(3) # equivalent to Λ(V"+++"), Λ(ℝ^3), Λ.V3
Out[21]:
In [22]:
G3.v13 * G3.v12
Out[22]:
In [23]:
i,j,k = hyperplanes(ℝ^3)
Out[23]:
In [24]:
@btime i^2, j^2, k^2, i*j*k
Out[24]:
In [25]:
@btime -(j+k) * (j+k)
Out[25]:
In [26]:
@btime -(j+k) * i
Out[26]:
In [27]:
basis"--"
Out[27]:
In [28]:
v1^2, v2^2, v12^2, v1*v2*v12
Out[28]:
In [29]:
Λ(62)
Out[29]:
In [30]:
Λ(62).v32a87Ng
Out[30]:
In [31]:
@btime Λ(62)
Out[31]:
In [32]:
@btime Λ(22)
Out[32]:
In [33]:
V = ℝ^22
Out[33]:
In [34]:
Λ(V+V')
Out[34]:
In [35]:
Λ(7) + Λ(7)'
Out[35]:
In [36]:
Λ.V3
Out[36]:
In [37]:
Λ.C3
Out[37]:
In [38]:
mixedbasis"2"
Out[38]:
In [39]:
w1+2w2
Out[39]:
In [40]:
ans(v1+v2)
Out[40]:
In [41]:
ℒ = (v1+2v2)∧(3w1+4w2)
Out[41]:
In [42]:
ℒ(v1+v2)
Out[42]:
In [43]:
L = [1,2] * [3,4]'; L * [1,1]
Out[43]:
In [44]:
generator = [8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
4 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
4 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
4 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
4 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
4 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
4 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
2 2 2 2 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
4 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
4 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0 0;
4 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0 0 0;
2 2 2 2 0 0 0 0 2 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0;
4 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0 0 0 0 0;
2 2 0 0 2 2 0 0 2 2 0 0 2 2 0 0 0 0 0 0 0 0 0 0;
2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 0 0 0 0 0 0 0 0;
2 0 0 2 2 0 0 2 2 0 0 2 2 0 0 2 0 0 0 0 0 0 0 0;
4 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 0 0;
2 0 2 0 2 0 0 2 2 2 0 0 0 0 0 0 2 2 0 0 0 0 0 0;
2 0 0 2 2 2 0 0 2 0 2 0 0 0 0 0 2 0 2 0 0 0 0 0;
2 2 0 0 2 0 2 0 2 0 0 2 0 0 0 0 2 0 0 2 0 0 0 0;
0 2 2 2 2 0 0 0 2 0 0 0 2 0 0 0 2 0 0 0 2 0 0 0;
0 0 0 0 0 0 0 0 2 2 0 0 2 2 0 0 2 2 0 0 2 2 0 0;
0 0 0 0 0 0 0 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0 2 0;
-3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1]
Out[44]:
In [45]:
const E24,W24 = Λ(24), ℝ^24+(ℝ^24)';
In [46]:
const Leech = SBlade{Float64,W24}(generator./sqrt(8));
In [47]:
typeof(Leech)
Out[47]:
In [48]:
ndims(vectorspace(Leech))
Out[48]:
In [49]:
Leech(E24.v1)
Out[49]:
In [50]:
Leech(E24.v2)
Out[50]:
In [51]:
Leech(E24.v3)
Out[51]:
In [52]:
Leech(E24.v1 + 2*E24.v2)
Out[52]:
In [53]:
ans⋅ans
Out[53]:
In [54]:
Leech(E24.v2 + E24.v5)
Out[54]:
In [55]:
ans⋅ans
Out[55]:
In [56]:
basis"2"
Out[56]:
In [57]:
(:a*v1 + :b*v2) ⋅ (:c*v1 + :d*v2)
Out[57]:
In [58]:
(:a*v1 + :b*v2) ∧ (:c*v1 + :d*v2)
Out[58]:
In [59]:
(:a*v1 + :b*v2) * (:c*v1 + :d*v2)
Out[59]:
In [60]:
basis"4"
Out[60]:
In [61]:
P,Q = :px*v1 + :py*v2 + :pz* v3 + v4, :qx*v1 + :qy*v2 + :qz*v3 + v4
Out[61]:
In [62]:
P∧Q
Out[62]:
In [63]:
R = :rx*v1 + :ry*v2 + :rz*v3 + v4
Out[63]:
In [64]:
P∧Q∧R
Out[64]:
In [ ]: