Re: calculus with Grassmann variables
- To: mathgroup at smc.vnet.net
- Subject: [mg21019] Re: [mg20970] calculus with Grassmann variables
- From: Daniel Lichtblau <danl at wolfram.com>
- Date: Thu, 2 Dec 1999 21:41:31 -0500 (EST)
- References: <199912010650.BAA07735@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Diego Bellisai wrote: > > Hi everybody, > I am looking for a Mathematica package or notebook which allows me > to deal with Grassmann (anticommuting) variables and to perform > calculations with both (standard) commuting and anticommuting variables. > In particular, I am interested in performing matrix calculus (products, > determinants and so on) with "anticommuting entries" matrices and with > commuting entries matrices. > Can somebody help me, please? > Cheers, Diego. > > * * * * * * * * * * * * * * * * * * * * * * * * * * * * > * Diego Bellisai * > * Physics Department * > * University of Padova * > * Via F. Marzolo, 8 - 35131 Padova (Italy) * > * * > * e-mail: bellisai at pd.infn.it * > * Tel.: ++39-049-8277183 Fax: ++39-049-8277102 * > * * * * * * * * * * * * * * * * * * * * * * * * * * * * Say you encapsulate all anticommuting variables with the head avar[]. Then you can define product rules to handle the commutation relations and furthermore distribute over Plus, pull out "scalars" (everything not with head of avar) using ordinary Times, and so on. Matrix multiplication is then just Inner with this new product specified in place of Times. To do determinants one can use Laplace expansion, again substituting the new product for Times. The rules below illustrate this method, though perhaps they could be simplified somewhat. They pass some basic sanity tests but I'd not guarantee that they are bug-free. Clear[myTimes]; myTimes[a___,avar[x_],b___,avar[x_],c___] := 0 myTimes[avar[x_],avar[y_],avar[z_]...] /; Not[OrderedQ[{x,y,z}]] := (Signature[{x,y,z}]* myTimes[Sequence @@ Map[avar,Sort[{x,y,z}]]]) myTimes[a_] /; Head[a]=!=Times := a myTimes[x___,y_Plus,z___] := myTimes[x,#,z]& /@ y myTimes[x___,y_Times,z___] := myTimes[x,Apply[Sequence,y],z] myTimes[x___,y_myTimes,z___] := myTimes[x,Apply[Sequence,y],z] myTimes[] = 1; myTimes[vars__] /; Length[{vars}]>2 := Module[{vl={vars},antis,coms}, antis = Cases[vl,avar[_]]; coms = Complement[vl, antis]; Apply[Times,coms]*Apply[myTimes,antis] ] myTimes[a_,b_] /; Head[a]=!=avar && Head[b]=!=avar := a*b Here is an example. We take a 3x3 matrix with avar[] entries and find its inner product with itself using these rules. m1 = {{avar[1],x,avar[2]}, {x2,avar[1]+2*avar[2],3*avar[1]-avar[2]}, {avar[1]-avar[2],x3,-3*avar[1]+avar[2]}}; In[324]:= InputForm[Inner[myTimes, m1, m1]] Out[324]//InputForm= {{x*x2 - myTimes[avar[1], avar[2]], 2*x*avar[2] + myTimes[x, avar[1]] + myTimes[avar[1], x] + myTimes[avar[2], x3], 3*x*avar[1] - x*avar[2] + 4*myTimes[avar[1], avar[2]]}, {2*x2*avar[2] + myTimes[x2, avar[1]] + myTimes[avar[1], x2] - 2*myTimes[avar[1], avar[2]], x*x2 + 3*x3*avar[1] - x3*avar[2], myTimes[x2, avar[2]] - 7*myTimes[avar[1], avar[2]]}, {x2*x3 + 3*myTimes[avar[1], avar[2]], -3*x3*avar[1] - x*avar[2] + 2*x3*avar[2] + myTimes[x3, avar[1]] + myTimes[avar[1], x] + myTimes[avar[2], x3], 3*x3*avar[1] - x3*avar[2] + myTimes[avar[1], avar[2]]}} Now for the determinant computation. Clear[ncDet] ncDet[{{a_}}] := a ncDet[mat_?MatrixQ] /; Length[mat]===Length[mat[[1]]] := With[{len=Length[mat], mat1=Drop[mat,{1}]}, Sum[myTimes[mat[[1,j]],ncDet[Drop[mat1,None,{j}]]], {j,len}]] In[329]:= InputForm[ncDet[m1]] Out[329]//InputForm= -3*x*x2*avar[1] + x*x2*avar[2] + x2*x3*avar[2] - 2*x*myTimes[avar[1], avar[2]] - x3*myTimes[avar[1], avar[2]] Daniel Lichtblau Wolfram Research
- References:
- calculus with Grassmann variables
- From: Diego Bellisai <diego.bellisai@pd.infn.it>
- calculus with Grassmann variables