# Can Mathematica do symbolic linear algebra?

For instance, is there some way I can say "let A and B be arbitrary real $m\times n$ and $k\times m$ matrices, Simplify[Transpose[Transpose[A].Transpose[B]]]" and Mathematica would simplify it to B.A?

I know I can set A and B to be matrices containing symbols (e.g. A = Table[Subscript[a,i,j],{i,m},{j,n}]), but results can get quite messy if the problem is more complex than Transpose[Transpose[A].Transpose[B]]

EDIT: To answer @Searke and @Artes questions in the comments: I'm currently watching this Stanford online machine learning course. If you look at the lecture notes, pages 8-11, you see a some matrix calculations. I can follow these calculations with pen and paper, but I haven't found a way to derive e.g. this result from page 11 using Mathematica: • Nope. The issue is that for a given symbol there is no way to say "Oh this symbol is a symmetric, real matrix." To the best of my knowledge, there is no package for this. Mar 20, 2012 at 13:17
• I would actually be very interested in hearing what people think such functionality should be able to do. Does some other software do this and how do they do it? Mar 20, 2012 at 13:18
• See related question: mathematica.stackexchange.com/questions/8/… Oct 4, 2012 at 11:16
• There's a MatrixD package that lets you differentiate matrix expressions -- mathematica.stackexchange.com/questions/138708/… Apr 26, 2017 at 19:49

For the posted example, TensorReduce does the trick:

TensorReduce[
Transpose[Transpose[A].Transpose[B]],
Assumptions -> {A ∈ Matrices[{m, n}], B ∈ Matrices[{k, m}]}
]

B.A


Initially, Mathematica is not designed for such abstract calculations.

But, Mathematica is a powerful programming language, so that one can add such functionality easily.

See the following examples in related area of differential geometry:

– jlh
Mar 26, 2020 at 8:58
• @jlh, that vendor seems to be no more, but I've added links to the Wayback Machine. May 12, 2020 at 11:46

Indeed this is a one liner in NCAlgebra:

<< NC
<< NCAlgebra
NCGrad[1/2 (x ** z - y)^T ** (x ** z - y), z]


which results in

-y^T ** x + z^T ** x^T ** x

I am not sure, but maybe this software for Mathematica http://www.math.ucsd.edu/~ncalg/ could somehow help. The software is for a package called NCAlgebra developed by UC San Diego. I am not familiar with the detailed usage, but it claims to implement capability to study noncommutative inequalities, linear controls, and semidefinite programming within Mathmeatica.

• Hi Konstantin, welcome to Mathematica.SE. Can you add some information about the software here? When that link dies ("when", not "if") your answer becomes useless. Oct 3, 2012 at 17:56