Hi Gilles, There is no magic which will remove the elemental complexity of these things. However, the complexity would be concentrated in the operator classes, where it probably should be. Furthermore, the type matching would be handled by compiler. Finally, the multiplication routines would grow as a need for those operations arises.
You are correct that moving these operations to an external class would expose details of data storage and break encapsulation. However, this is done consistently throughout math commons-look at the principal components class. The SVD class asks for a reference to the data array (if memory serves me). -Greg