Matrix Multiplication A*B*A'

#1

What are the efficient options to perform matrix multiplications of the form A*B*A and A*B*A' ? I am particularly intereted in the case when A and B are Symmetric or Hermitian and when these multiplications are performed repeatedly inside a loop, such as

sum(A*B*A for B in Bset),

where Bset is an array of matrices.

Some time ago i found a post on this topic, but i am not able to retrive it anymore.

#2

If your matrices are positive definite as well you should have a look at https://github.com/JuliaStats/PDMats.jl

#3

See also the discussion in

We’ve long wanted a specialized dot(x,M,y) function, but no one has gotten around to implementing it.

1 Like
#4

Wouldn’t that be the same as A*sum(Bset)*A? But I guess your real expression doesn’t allow such simplification…

1 Like
#5

No, in fact i rather need to compute expressions such as

sum(log(A*B*A) for B in Bset)

#6

Unfortunately PDMats concerns real positive matrices only. I am interested in either real or complex positive matrices. As per the A*B*A' expression, PDmats decomposes the expression as A*L*L'A' using the Cholesky decomposition B=L*L' and uses low-level function rmul! in LinearAlgebra. I have tried and i don’t get a significant difference in computation time and exactly the same memory allocation.