Skip to main content

matrix - 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}};
P.Q

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?


https://stackoverflow.com/questions/5708208/symbolic-matrices-in-mathematica-with-unknown-dimensions


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



Answer



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


Inner[Times,P,Q,Plus]


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}
}

Comments