(* Package for Clifford Algebra in 3-dimensional euclidean and antieuclidean spaces, including the evaluation of arbitrary functions based on spectral theory. Author: Josep Manel Parra Serra Address: Departament de Fisica Fonamental Universitat de Barcelona Diagonal 647 E-08028 Barcelona (Spain) e-mail: jmparra@hermes.ffn.ub.es FAX: 34 3 402 11 49 *) < x - I y RPart[v_] := Expand[(v + ComplexConjugate[v])/2] IPart[v_] := Expand[(v - ComplexConjugate[v])/(2I)] (* Quaternionic product and quaternionic functions: *) Qp[{x_, y_}, {u_, v_}] := {x*u - y . v, x*v + u*y + Cross[y, v]}; Qp[a_,b__]:= Fold[Qp,a,{b}]; Attributes[Qp]={Flat}; QFun[func_,x_]:= Module[{n1,v1,z1}, n1=Sqrt[x[[2]] . x[[2]]]; v1=x[[2]] / n1; z1=func[x[[1]]+ I n1]; result= Chop[{Re[z1], Im[z1] v1}] ] (* Clifford Product for signature +++, CliffordAlgebra(3,0), isomorphic to Pauli's matrix algebra *) C3p[{x_, v_, a_, y_},{z_, w_, b_, t_}] := {x*z + v . w - a . b - y*t , x*w + v*z - y*b - a*t - Cross[v, b] - Cross[a, w] , x*b + a*z + y*w + v*t + Cross[v, w] - Cross[a, b] , x*t + y*z + v . b + a . w } C3p[a_,b__]:= Fold[C3p,a,{b}]; Attributes[C3p] = {Flat}; CC3p[a_,b_]:= C3p[a,b]-C3p[b,a]; CA3p[a_,b_]:= C3p[a,b]+C3p[b,a]; (* Clifford product for signature ---, CliffordAlgebra(0,3), isomorphic to a double quaternion algebra *) C3n[{x_, v_, a_, y_},{z_, w_, b_, t_}] := {x*z - v . w - a . b + y*t , x*w + v*z - y*b - a*t + Cross[v, b] + Cross[a, w] , x*b + a*z - y*w - v*t + Cross[v, w] + Cross[a, b] , x*t + y*z + v . b + a . w } C3n[a_,b__]:= Fold[C3n,a,{b}]; Attributes[C3n] = {Flat} CC3n[a_,b_]:= C3n[a,b]-C3n[b,a]; CA3n[a_,b_]:= C3n[a,b]+C3n[b,a]; (* (Generalized) Spinorial Norm for signatures +++ i --- *) SN3p[{x_, v_, a_, y_}] := { x^2 + a . a - y^2 - v . v ,{0,0,0},{0,0,0}, 2*(x*y - v . a)} SN3n[{x_, v_, a_, y_}] := { x^2 + a . a + y^2 + v . v ,{0,0,0},{0,0,0}, 2*(x*y - v . a)} (* Characteristic Determinant for signatures +++ i --- *) Det3p[{x_, v_, a_, y_}] := (x^2 + a . a - y^2 - v . v)^2 + 4*(x*y - v . a)^2 Det3n[{x_, v_, a_, y_}] := (x^2 + a . a + y^2 + v . v)^2 - 4*(x*y - v . a)^2 (* Inverses for signatures +++ i --- *) Inverse3p[{x_, v_, a_, y_}] := C3p[{ x^2 + a . a - y^2 - v . v ,{0,0,0},{0,0,0}, - 2*(x*y - v . a)},{x, -v, -a, y}] / Det3p[{x, v, a, y}] Inverse3n[{x_, v_, a_, y_}] := C3n[{ x^2 + a . a + y^2 + v . v ,{0,0,0},{0,0,0}, - 2*(x*y - v . a)},{x, -v, -a, y}] / Det3n[{x, v, a, y}] (* Universal Transformation Law for signatures +++ and --- , the operador is the factor at left and the first argument of the function: *) UTL3p[a_, b_] := C3p[a,b,Inverse3p[a]] UTL3n[a_, b_] := C3n[a,b,Inverse3n[a]] (* Main or Grade Involution, Reversion, and Graded reversion or (Clifford conjugation), and duals (times the unit volume) *) GI3[{x_, v_, a_, y_}] := {x, - v, a, -y}; Rev3[{x_, v_, a_, y_}] := {x, v, - a, -y}; GRev3[x_]:= GI3[Rev3[x]]; Dual3p[{x_, v_, a_, y_}] := {-y, -a, v, x}; Dual3n[{x_, v_, a_, y_}] := {y, -a, -v, x}; (* Projectors upon the several exterior degrees *) Part30[{x_, v_, a_, y_}] := x Part31[{x_, v_, a_, y_}] := v Part32[{x_, v_, a_, y_}] := a Part33[{x_, v_, a_, y_}] := y (* Regular matrix representations for Cl(3,0) and Cl(0,3) rg3p(n)[{flat, alphabetically ordered Clifford element}] *) rg3p[{a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_}]:= {{a1, a2, a3, a4, -a5, -a6, -a7, -a8}, {a2, a1, a5, a6, -a3, -a4, -a8, -a7}, {a3, -a5, a1, a7, a2, a8, -a4, a6}, {a4, -a6, -a7, a1, -a8, a2, a3, -a5}, {a5, -a3, a2, a8, a1, a7, -a6, a4}, {a6, -a4, -a8, a2, -a7, a1, a5, -a3}, {a7, a8, -a4, a3, a6, -a5, a1, a2}, {a8, a7, -a6, a5, a4, -a3, a2, a1}} rg3n[{a1_, a2_, a3_, a4_, a5_, a6_, a7_, a8_}]:= {{a1, -a2, -a3, -a4, -a5, -a6, -a7, a8}, {a2, a1, -a5, -a6, a3, a4, -a8, -a7}, {a3, a5, a1, -a7, -a2, a8, a4, a6}, {a4, a6, a7, a1, -a8, -a2, -a3, -a5}, {a5, -a3, a2, -a8, a1, -a7, a6, -a4}, {a6, -a4, a8, a2, a7, a1, -a5, a3}, {a7, -a8, -a4, a3, -a6, a5, a1, -a2}, {a8, a7, -a6, a5, a4, -a3, a2, a1}} (* regular matrix representations for 3-dimensional Clifford algebras r3p(n)[{structured cliffor}]; matrix indices are always in alphabetic order *) r3p[{sc_,{a1_,a2_,a3_},{b1_,b2_,b3_},psc_}]:= {{sc, a1, a2, a3, -b1, -b2, -b3, -psc}, {a1, sc, b3, -b2, -psc, a3, -a2, -b1}, {a2, -b3, sc, b1, -a3, -psc, a1, -b2}, {a3, b2, -b1, sc, a2, -a1, -psc, -b3}, {b1, psc, -a3, a2, sc, b3, -b2, a1}, {b2, a3, psc, -a1, -b3, sc, b1, a2}, {b3, -a2, a1, psc, b2, -b1, sc, a3}, {psc, b1, b2, b3, a1, a2, a3, sc}} r3n[{sc_,{a1_,a2_,a3_},{b1_,b2_,b3_},psc_}]:= {{sc, -a1, -a2, -a3, -b1, -b2, -b3, psc}, {a1, sc, -b3, b2, -psc, -a3, a2, -b1}, {a2, b3, sc, -b1, a3, -psc, -a1, -b2}, {a3, -b2, b1, sc, -a2, a1, -psc, -b3}, {b1, -psc, -a3, a2, sc, -b3, b2, -a1}, {b2, a3, -psc, -a1, b3, sc, -b1, -a2}, {b3, -a2, a1, -psc, -b2, b1, sc, -a3}, {psc, b1, b2, b3, a1, a2, a3, sc}} (* Combining different expressions: Alphabetic, Sructured or Standard, Geometric and Matrix forms for the elements in the algebra *) StoA[{alpha_,{v1_,v2_,v3_},{bv1_,bv2_,bv3_},lambda_}]:= {alpha,v1,v2,v3,bv3,-bv2,bv1,lambda}; AtoS[{alpha_,v1_,v2_,v3_,bv3_,bv2_,bv1_,lambda_}]:= {alpha,{v1,v2,v3},{bv1,-bv2,bv3},lambda}; StoG[{alpha_,{v1_,v2_,v3_},{bv1_,bv2_,bv3_},lambda_}]:= alpha + v1 e1+ v2 e2+ v3 e3+ bv1 e23 + bv2 e31 + bv3 e12+ lambda e123; StoGG[{alpha_,{v1_,v2_,v3_},{bv1_,bv2_,bv3_},lambda_}]:= alpha e[]+ v1 e[1]+ v2 e[2]+ v3 e[3]+ bv1 e[2,3] + bv2 e[3,1] + bv3 e[1,2]+ lambda e[1,2,3]; (* matrius de Pauli per a C3p *) sigma1:={{0,1},{1,0}}; sigma2:={{0,-I},{I,0}}; sigma3:={{1,0},{0,-1}}; sigma0:={{1,0},{0,1}}; StoM[{alpha_,{v1_,v2_,v3_},{bv1_,bv2_,bv3_},lambda_}]:= alpha*sigma0+v1*sigma1+v2*sigma2+ v3*sigma3 + I*bv1*sigma1 + I*bv2*sigma2+ I*bv3*sigma3+I*lambda*sigma0; MtoS[a__]:=Chop[(1/2)*{RPart[a[[1,1]]+a[[2,2]]],{RPart[a[[1,2]]+a[[2,1]]], IPart[a[[2,1]]-a[[1,2]]],RPart[a[[1,1]]-a[[2,2]]]}, {IPart[a[[1,2]]+a[[2,1]]],RPart[a[[1,2]]-a[[2,1]]], IPart[a[[1,1]]-a[[2,2]]]},IPart[a[[1,1]]+a[[2,2]]]}] StoQ[{x_, v_, a_, y_}]:= {{x+y, a-v},{x-y, a+v}}; QtoS[{{a_,b_},{c_,d_}}]:=(1/2)*{a+c,d-b,b+d,a-c}; QCP[{a_,b_},{c_,d_}]:={Qp[a,c], Qp[b,d]}; QCP[a_,b__]:= Fold[QCP,a,{b}]; Attributes[QCP]={Flat}; (* Some useful elements *) ee={1,{0,0,0},{0,0,0},0} ee1={0,{1,0,0},{0,0,0},0} ee2={0,{0,1,0},{0,0,0},0} ee3={0,{0,0,1},{0,0,0},0} ee23={0,{0,0,0},{1,0,0},0} ee31={0,{0,0,0},{0,1,0},0} ee12={0,{0,0,0},{0,0,1},0} ee123={0,{0,0,0},{0,0,0},1} random3[]:= Table[Random[Real,{-1,1}],{i,1,3}] random8[]:= Table[Random[Real,{-1,1}],{i,1,8}] random[]:= AtoS[random8[]] crandom[]:= random[]+ I random[] randomq[]:= {Random[Real,{-1,1}],random3[]} elemor={1,{2,3,4},{5,6,7},8}; elemv={alpha,{v1,v2,v3},{bv1,bv2,bv3},lambda}; elemw={beta,{w1,w2,w3},{bw1,bw2,bw3},mu}; qfield={s[x,y,z],{a1[x,y,z],a2[x,y,z],a3[x,y,z]}}; field={s[x,y,z],{a1[x,y,z],a2[x,y,z],a3[x,y,z]}, {b1[x,y,z],b2[x,y,z],b3[x,y,z]}, ps[x,y,z]}; tdfield={st[t,x,y,z],{at1[t,x,y,z],at2[t,x,y,z],at3[t,x,y,z]}, {bt1[t,x,y,z],bt2[t,x,y,z],bt3[t,x,y,z]}, pst[t,x,y,z]}; z3={0,0,0}; z4={0,z3}; (* Nabla and associated operators *) Nabla3p[{x_, v_, a_, y_}] := { Div[v], Grad[x]- Curl[a], Curl[v] + Grad[y], Div[a]} Nabla3n[{x_, v_, a_, y_}] := { Div[v], -Grad[x]- Curl[a], -Curl[v] + Grad[y], - Div[a]} ExtD3p[{x_, v_, a_, y_}] := { 0, Grad[x], Curl[v] , Div[a]} ExtD3n[{x_, v_, a_, y_}] := { 0, -Grad[x], -Curl[v] , -Div[a]} Codif3[{x_, v_, a_, y_}] := { Div[v], - Curl[a], Grad[y], 0} TpNablap[a__]:= D[a,t]+Nabla3p[a]; TnNablap[a__]:= -D[a,t]+Nabla3p[a]; TpNablan[a__]:= D[a,t]+Nabla3n[a]; TnNablan[a__]:= -D[a,t]+Nabla3n[a]; LapBel3p[x_]:= Nabla3p[Nabla3p[x]] LapBel3n[x_]:= Nabla3n[Nabla3n[x]] (* Spectral block for Cl(3,0) *) CFun1p[ func_,{x_, v_, a_, y_}] := Module[ {aux1, aux2, aux3, aux4, xx1, yy1, xx2, yy2, rr1, rr2, ss}, aux1= v . v - a . a + 2*I*(v . a); aux2= Sqrt[aux1] ; rr1 =Re[aux2] ; rr2 = Im[aux2] ; ss = rr1^2+rr2^2 ; aux3 = func[x+ I*y + aux2] ; aux4 = func[x+ I*y - aux2] ; xx1 = Re[aux3] ; xx2 = Re[aux4]; yy1 = Im[aux3]; yy2 = Im[aux4]; result = {(xx1+xx2)/2, (rr1*(xx1-xx2)+rr2*(yy1-yy2))*(1/(2*ss))*v - (rr1*(yy1-yy2)-rr2*(xx1-xx2))*(1/(2*ss))*a, (rr1*(xx1-xx2)+rr2*(yy1-yy2))*(1/(2*ss))*a + (rr1*(yy1-yy2)-rr2*(xx1-xx2))*(1/(2*ss))*v, (yy1+yy2)/2} ] CFun2p[ func_,{x_, v_, a_, y_}] := Module[ {aux1, aux2, aux3, aux4, xx1, yy1, xx2, yy2, rr1, rr2, ss}, aux1= v . v - a . a + 2*I*(v . a); aux2= Sqrt[aux1] ; rr1 =RPart[aux2] ; rr2 = IPart[aux2] ; ss = rr1^2+rr2^2 ; aux3 = func[x+ I*y + aux2] ; aux4 = func[x+ I*y - aux2] ; xx1 = RPart[aux3] ; xx2 = RPart[aux4]; yy1 = IPart[aux3]; yy2 = IPart[aux4]; Result = Chop[{(xx1+xx2)/2, (rr1*(xx1-xx2)+rr2*(yy1-yy2))*(1/(2*ss))*v - (rr1*(yy1-yy2)-rr2*(xx1-xx2))*(1/(2*ss))*a, (rr1*(xx1-xx2)+rr2*(yy1-yy2))*(1/(2*ss))*a + (rr1*(yy1-yy2)-rr2*(xx1-xx2))*(1/(2*ss))*v, (yy1+yy2)/2}] ] CFun1n[func_,x_]:= Module[{y,n1,n2,v1,v2,z1,z2}, y=StoQ[x]; n1=Sqrt[y[[1,2]] . y[[1,2]]]; n2=Sqrt[y[[2,2]] . y[[2,2]]]; v1=y[[1,2]] / n1; v2=y[[2,2]] / n2; z1=func[y[[1,1]]+ I n1]; z2=func[y[[2,1]]+ I n2]; result= Chop[{(Re[z1]+Re[z2])/2, (Im[z2] v2 - Im[z1] v1)/2, (Im[z2] v2 + Im[z1] v1)/2,(Re[z1]-Re[z2])/2}] ] CFun2n[func_,x_]:= Module[{y,n1,n2,v1,v2,z1,z2,zc1,zc2}, y=StoQ[x]; n1=Sqrt[y[[1,2]] . y[[1,2]]]; n2=Sqrt[y[[2,2]] . y[[2,2]]]; v1=y[[1,2]] / n1; v2=y[[2,2]] / n2; z1=func[y[[1,1]]+ I n1]; z2=func[y[[2,1]]+ I n2]; zc1=func[y[[1,1]]- I n1]; zc2=func[y[[2,1]]- I n2]; result= Chop[{(z1+z2+zc1+zc2)/4, I (zc2-z2)/4 v2 +I (z1- zc1)/4 v1, I (zc2-z2)/4 v2 + I (zc1-z1)/4 v1,(z1+zc1-z2-zc2)/4}] ] CFun3n[func_,x_]:= Module[{y,n1,n2,v1,v2,z1,z2}, y=StoQ[x]; n1=Sqrt[y[[1,2]] . y[[1,2]]]; n2=Sqrt[y[[2,2]] . y[[2,2]]]; v1=y[[1,2]] / n1; v2=y[[2,2]] / n2; z1=func[y[[1,1]]+ I n1]; z2=func[y[[2,1]]+ I n2]; result= Chop[{(RPart[z1]+RPart[z2])/2, (IPart[z2] v2 - IPart[z1] v1)/2, (IPart[z2] v2 + IPart[z1] v1)/2,(RPart[z1]-RPart[z2])/2}] ] CFun4n[func_,x_]:= Module[{q,q1,q2,q3}, q=StoQ[x]; q1=q[[1]]; q2=q[[2]]; q3={QFun[func,q1],QFun[func,q2]}; result=QtoS[q3] ] (* End of the package for 3 dimensions *) (* Complementary files: rotations and conformal transformations; maxwell equations and the Lorentz group *)