I want to simplify trigonometric identities in a matrix. For example, say I want to show that the composition of two rotation matrices is a rotation, I can do with sage something like

`var("theta1,theta2") Rtheta1=column_matrix([[cos(theta1),sin(theta1)],[-sin(theta1),cos(theta1)]]) Rtheta2=column_matrix([[cos(theta2),sin(theta2)],[-sin(theta2),cos(theta2)]]) produit=Rtheta1*Rtheta2 show(produit.simplify_trig()) show(produit.apply_map(lambda x: x.trig_reduce()))`

Note that `simplify_trig`

doesn't work on matrices and that you need to use `apply_map`

to use it entry by entry, as detailed in Mike Hansen's answer in this question .

However when I get to 3 matrices, sage can't simplify with the above procedure:

`var("theta1,theta2,theta3") Rtheta1=column_matrix([[cos(theta1),sin(theta1)],[-sin(theta1),cos(theta1)]]) Rtheta2=column_matrix([[cos(theta2),sin(theta2)],[-sin(theta2),cos(theta2)]]) Rtheta3=column_matrix([[cos(theta3),sin(theta3)],[-sin(theta3),cos(theta3)]]) produit=Rtheta1*Rtheta2*Rtheta3 show(produit.apply_map(lambda x: x.trig_reduce()))`

For example, the 1-1 entry in this matrix is returned as `cos(theta1 + theta2)*cos(theta3) - sin(theta1 + theta2)*sin(theta3)`

.
The weird thing is that using `(cos(theta1 + theta2)*cos(theta3) - sin(theta1 + theta2)*sin(theta3)).trig_reduce()`

produces the correct simplification `cos(theta1 + theta2 + theta3)`

.

What's happening here? Any other way to force the simplification?