In [1]:
from sympy import *
init_printing()
from galgebra.ga import Ga
def augment(ga,sym='n',sig=1):
'''
augments an existing Geometric Algebra by a single dimension of specified
signature
'''
g = ga.g
g_proj = eye(len(ga.basis)+1)*sig
for m in range(0,shape(g)[0]):
for n in range(0,shape(g)[1]):
g_proj[m,n] = g[m,n]
basis = ' '.join([str(k) for k in ga.basis] +[sym])
GA = Ga(basis, g=g_proj)
GA.ga_orginal = ga
return GA
In [3]:
affine = lambda ga: augment(ga, 'n',0)
projective = lambda ga: augment(ga, 'n',1)
conformal = lambda ga: augment(augment(ga, 'n_+',1),'n_-',-1)
In [5]:
# euclidean geometries
ge2 = Ga('e1 e2',g=[1,1])
ge3 = Ga('e1 e2 e3',g=[1,1,1])
# projective geometries
gp2 = projective(ge2)
gp3 = projective(ge3)
# conformal geometries
gc2 = conformal(ge2)
gc3 = conformal(ge3)
In [6]:
gc3.mv('x', 'vector')
Out[6]:
In [7]:
gp2.mv('p','vector')
Out[7]:
In [22]:
alpha=ge3.mv('alpha','scalar')
a=ge3.mv('a','vector')
B = ge3.mv('B','bivector')
In [31]:
R = alpha+B
R
Out[31]:
In [32]:
e1,e2,e3 = ge3.mv()
e12= e1*e2
e12*a*e12
Out[32]:
In [33]:
-e3*a*e3
Out[33]:
In [36]:
I = e1*e2*e3
I
Out[36]:
In [41]:
I*e3
Out[41]:
In [29]:
b = R*a*R.rev()
b
Out[29]:
In [31]:
ge3,e1,e2,e3 = Ga.build('e1 e2 e3',g=[1,1,1])
In [39]:
a= ge3.mv('a','vector')
b= ge3.mv('b','vector')
Out[39]:
In [36]:
e12 = e1*e2
e13 = e1*e3
e13.dual()
Out[36]:
In [20]:
import galge
In [ ]: