Services & Resources / Wolfram Forums / MathGroup Archive

MathGroup Archive 2012

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

Search the Archive

Re: Non Commutative Multiply

  • To: mathgroup at
  • Subject: [mg128609] Re: Non Commutative Multiply
  • From: David Bailey <dave at>
  • Date: Thu, 8 Nov 2012 19:02:30 -0500 (EST)
  • Delivered-to:
  • Delivered-to:
  • Delivered-to:
  • Delivered-to:
  • References: <k7fm4l$jko$>

On 08/11/2012 07:14, Rodrigo AP wrote:
> Dear group,
> I want to multiply two matrices, for example,
> A = {{e, f}, {g, h}}
> B = {{a, b}, {c, d}}
> Using A.B, Mathematica returns
> {{a e + b g, a f + b h}, {c e + d g, c f + d h}}
> I would like to get, however, the following result:
> {{e a + f c, e b + f d}, {g a + h c, g b + h d}}
> since, for me, the entries {a,b,c,d,e,f,g,h} are operators, i.e., they
> are non-commutative.
> I could solve this problem clearing the attribute "Orderless" in the
> built-in function Times:
> ClearAttributes[Times, Orderless]
> I know, however, this can be dangerous. I tried to define a function
> Times2[a_,b_]:=Times[a,b]
> and then use ClearAttributes[Times2, Orderless] but it doesn't work.
> How could I solve this problem?
> Thanks in advance
> Rodrigo
First, avoid using names that start with capital letters - unless 
perhaps they are long names not likely to get used within Mathematica, 
such as MyHorses (or indeed probably anything of the form My....)!

To represent non commutative multiplications, you really have to use 
another operator which doesn't have the Orderless attribute. Times is 
built too far down in Mathematica, to make it useful to change its 

m1 = {{e, f}, {g, h}}
m2 = {{a, b}, {c, d}}

In[5]:= Inner[CircleTimes,m1,m2,Plus]

Out[5]= {{e\[CircleTimes]a + f\[CircleTimes]c,
   e\[CircleTimes]b + f\[CircleTimes]d}, {g\[CircleTimes]a +
    h\[CircleTimes]c, g\[CircleTimes]b + h\[CircleTimes]d}}

(Note that \[CircleTimes] will display nicely inside Mathematica).

Since only you are using CircleTimes, you can sensibly change its 
attributes, for example by giving the operator associativity with the 
Flat attribute.

David Bailey

  • Prev by Date: Re: Help with map /@
  • Next by Date: Re: Error Code: 616
  • Previous by thread: Re: Non Commutative Multiply
  • Next by thread: Re: Non Commutative Multiply