Non-commutative symbolic linear algebra



I am fairly new to Mathematica but I thought I would be a helpful tool to carry out a few simple linear algebra calculations. It seems like an easy task but I cannot figure out how to do it. For example, say I want to multiply two matrices composed of sub-matrices:

P := {{P1, P12}, {P12\[Transpose], P2}}; Q := {{Q1, Q12}, {Q12\[Transpose], Q2}};

but it returns:

{{P1 Q1 + P12 Transpose[Q12], P1 Q12 + P12 Q2}, 
 {Q1 Transpose[P12] + P2 Transpose[Q12], P2 Q2 + Q12 Transpose[P12]}}

How can I get a non-commutative result (e.g. the bottom left element should be P12\[Transpose] Q1)? Also, how do I get it to show the little transpose 'T' instead of writing it out?

I found similar questions posted:

Can Mathematica do symbolic linear algebra?

but I'm not trying to do anything as complicated as those.

John Smith

Posted 2012-04-26T13:36:44.000

Reputation: 253

Transpose 'T': Just type esc-tr-esc after the matrix and it's done. – Sjoerd C. de Vries – 2012-04-26T21:42:07.980



Searke hints at the answer. Remembering that the dot product is a specific form of Inner:


We can simply replace Times wtih NonCommutativeMultiply

Inner[NonCommutativeMultiply, P, Q, Plus]

With the output:

 {P1 ** Q1 + P12 ** Transpose[Q12],P1 ** Q12 + P12 ** Q2}, 
 {P2 ** Transpose[Q12] + Transpose[P12] ** Q1, P2 ** Q2 + Transpose[P12] ** Q12}


Posted 2012-04-26T13:36:44.000

Reputation: 4 819


If you want to get into this topic there is an NonCommutativeMultiply (**)

and a tutorial on Flat and Orderless Functions.

Ernst Stelzer

Posted 2012-04-26T13:36:44.000

Reputation: 1 985

Good point: Attributes[Times] gives {Flat, Listable, NumericFunction, OneIdentity, Orderless, Protected} – tkott – 2012-04-26T14:14:36.603