Re: Re: Question about Hold
- To: mathgroup at smc.vnet.net
- Subject: [mg48851] Re: [mg48820] Re: Question about Hold
- From: Oleksandr Pavlyk <pavlyk at phys.psu.edu>
- Date: Sat, 19 Jun 2004 04:30:52 -0400 (EDT)
- Organization: Penn State University; Department of Physics
- References: <carjrn$r76$1@smc.vnet.net> <200406180612.CAA10634@smc.vnet.net>
- Reply-to: pavlyk at phys.psu.edu
- Sender: owner-wri-mathgroup at wolfram.com
Jens-Peer Kuska wrote:
> Hi,
>
> Commute[a, b] := c
> Commute[a^n_, b] := Commute[a^(n - 1), Commute[a, b]]
Jens, this gives plain wrong answer.
Commute[a^2, b] = Commute[a,c]
while it must be a*c + c*a
Hence one must use NonCommutativeMultiply. Below is the code
I use to define algebraic properties of commutator over the
ring of quantum operators.
Commute[(a_)*(b_), c_] := a*Commute[b, c] + Commute[a, c]*b;
Commute[a_, (b_)*(c_)] := b*Commute[a, c] + Commute[a, b]*c;
Commute[(a_)?NumericQ, b_] := 0;
Commute[a_, a_] := 0;
Commute[a_, (b_)?NumericQ] := 0;
Commute[a_, b_Plus] := Module[{LinTMP},
Distribute[LinTMP[a, b], Plus, LinTMP, Plus, Commute]];
Commute[a_Plus, b_] := Module[{LinTMP},
Distribute[LinTMP[a, b], Plus, LinTMP, Plus, Commute]];
JacobiIdentity[a_, b_, c_] := Expand[
Commute[a, Commute[b, c]] +
Commute[b, Commute[c, a]] +
Commute[c, Commute[a, b]]
];
Commute[(a_)**(b_), c_] := a**Commute[b, c] + Commute[a, c]**b;
Commute[c_, (a_)**(b_)] := a**Commute[c, b] + Commute[c, a]**b;
Unprotect[ NonCommutativeMultiply];
(a___)**((b_)?NumericQ*(c_))**(d___) :=
b*NonCommutativeMultiply[Sequence[a, c, d]];
(a___)**0**(b___) := 0;
(a___)**(b_Plus)**(c___) :=
Module[{LinTMP},
Distribute[LinTMP[a, b,c], Plus, LinTMP, Plus,
NonCommutativeMultiply]];
Protect[ NonCommutativeMultiply];
After this is defined, let us define Heisenberg algebra
Commute[ A, B ] = 1;
Commute[ A**A, B ] gives 2 A as expected
Regards,
Sasha
>
> Regards
> Jens
>
> Daohua Song wrote:
>
>>Hi,evryone,
>> I define a commute relation for quantum operators,i fact i learn this
>>from the forum.Here is the problem.
>> Commute[A,B]=C.
>> Commute[A^2,B], i try to use Hold[A*A] instead of A^2, then mathematica
>>even won't evaluate it.!
>> Any suggestion to work on the power commutation?
>> Thanks
>>Daohua
- References:
- Re: Question about Hold
- From: Jens-Peer Kuska <kuska@informatik.uni-leipzig.de>
- Re: Question about Hold