Function: GTP[cmulB] - Clifford product in the Clifford algebra Cl(B1)
Calling Sequence:
cmulB(p1,p2,B1);
Parameters:
p1, p2 - expressions of the type 'cliscalar' or 'clipolynom'
B1 - matrix of a bilinear form B1
Description:
Procedure 'cmulB' gives the Clifford product in the Clifford algebra Cl(B1) where B1 an arbitrary bilinear form.
It differs from cmul in that a user may enter any form B1 as the third argument and the product of p1 and p2 will be computed in Cl(B1) regardless of the current value of B. Recall that B, when defined, is a global variable storing a bilinear form B used as a default to compute the Clifford product in Cl(B). Thus, 'cmul' by default computes the Clifford product with the form B while 'cmulB' computes the same product with the user-supplied form B1.
The bilinear form B1 is totally arbitrary. It may be symbolic, undefined, symmetric, diagonal, with or without an antisymmetric part, numeric. When used as the third argument, it does not overwrite B.
No infix form for 'cmulB' is available since it is intended to be used with the third argument. If the third argument is not entered, an error message is displayed.
Calls to 'cmulB' with different values of B1 are made when computing products of tensors with GTP[gradedprod] or GTP[gprod] represented as polynomials of type GTP[`type/gradedpolynom`] , GTP[`type/gradedmonom`] , or GTP[`type/tensorprod`] . In that case, B1 is expected to be diagonal. See examples below.
Examples:
> restart:with(Cliff5):with(GTP):
Warning, new definition for init
> B:=linalg[diag](1,1):B1:=linalg[diag](1,-1):B2:=linalg[matrix](2,2,[1,-1,1,-1]):
> p1:=e1-2*e2+e1we2:p2:=-e1we2+3*e2:
> cmul(p1,p2);
> cmulB(p1,p2); #testing an error message
Error, (in cmulB) cmulB uses a 3rd argument, B1 (of type matrix), which is missing
> cmulB(p1,p2,B); #product of p1 and p2 in Cl(B)
> cmulB(p1,p2,B1); #product of p1 and p2 in Cl(B1)
> cmulB(p1,p2,B2); #product of p1 and p2 in Cl(B1)
> B3:=matrix(2,2,[]): #matrix B3 may be symbolic
> cmulB(p1,p2,B3);
Here is an example where 'cmulB' will be called by GTP[gradedprod] , GTP[gprod] when three different arguments B, B1, and B2 are used. Remember that in that case all three forms B, B1, and B2 must be diagonal.
> gprod(3*e1 &t e2 &t e2, 2*e1 &t e2 &t e2,B,B1,B1);
> gradedprod((2/3)*(e1 &t e2)-(5/a)*(e2we1 &t e2we1),3*(e1 &t e2)+Pi*(e1we2 &t e2we1),B1,B);
> gcollect(%);
> evalm(B); #B is not overwritten
>
See Also: Cliff5[cmul] , GTP[`type/gradedmonom`] , GTP[gbasis] , GTP[`type/gradedodd`] , GTP[grade] , GTP[`&t`] , Cliff5[`type/tensorprod`] , GTP[gradedprod] , GTP[gprod] , GTP[`type/gradedeven`]