MathGroup Archive 2004

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Re: Question about Hold

  • To: mathgroup at
  • Subject: [mg48851] Re: [mg48820] Re: Question about Hold
  • From: Oleksandr Pavlyk <pavlyk at>
  • Date: Sat, 19 Jun 2004 04:30:52 -0400 (EDT)
  • Organization: Penn State University; Department of Physics
  • References: <carjrn$r76$> <>
  • Reply-to: pavlyk at
  • Sender: owner-wri-mathgroup at

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___) :=
     Distribute[LinTMP[a, b,c], Plus, LinTMP, Plus,
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
>   Jens

> Daohua Song wrote:
>>    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

  • Prev by Date: Re: Announcement: Calculus with Mathematica
  • Next by Date: Re: Using NDSolve in NonlinearFit
  • Previous by thread: Re: Question about Hold
  • Next by thread: Re: Question about Hold