14
$\begingroup$

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.

$\endgroup$
12
$\begingroup$

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}
}
$\endgroup$
8
$\begingroup$

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

and a tutorial on Flat and Orderless Functions.

$\endgroup$
  • $\begingroup$ Good point: Attributes[Times] gives {Flat, Listable, NumericFunction, OneIdentity, Orderless, Protected} $\endgroup$ – tkott Apr 26 '12 at 14:14

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.