ASKSAGE: Sage Q&A Forum - RSS feedhttps://ask.sagemath.org/questions/Q&A Forum for SageenCopyright Sage, 2010. Some rights reserved under creative commons license.Fri, 08 Nov 2019 21:18:29 +0100Trigonometric simplifications and matriceshttps://ask.sagemath.org/question/48674/trigonometric-simplifications-and-matrices/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` or `trig_reduce` don'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](https://ask.sagemath.org/question/7773/is-there-a-way-to-simplify_full-and-trig_reduce-a-matrix/) .
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?Fri, 08 Nov 2019 15:53:07 +0100https://ask.sagemath.org/question/48674/trigonometric-simplifications-and-matrices/Answer by tmonteil for <p>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</p>
<blockquote>
<pre><code> 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()))
</code></pre>
</blockquote>
<p>Note that <code>simplify_trig</code> or <code>trig_reduce</code> don't work on matrices and that you need to use <code>apply_map</code> to use it entry by entry, as detailed in Mike Hansen's answer in <a href="https://ask.sagemath.org/question/7773/is-there-a-way-to-simplify_full-and-trig_reduce-a-matrix/">this question</a> .</p>
<p>However when I get to 3 matrices, sage can't simplify with the above procedure: </p>
<blockquote>
<pre><code>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()))
</code></pre>
</blockquote>
<p>For example, the 1-1 entry in this matrix is returned as <code>cos(theta1 + theta2)*cos(theta3) - sin(theta1 + theta2)*sin(theta3)</code> .
The weird thing is that using <code>(cos(theta1 + theta2)*cos(theta3) - sin(theta1 + theta2)*sin(theta3)).trig_reduce()</code> produces the correct simplification <code>cos(theta1 + theta2 + theta3)</code> .</p>
<p>What's happening here? Any other way to force the simplification?</p>
https://ask.sagemath.org/question/48674/trigonometric-simplifications-and-matrices/?answer=48675#post-id-48675Apparently `trig_reduce` is not idempotent and you have to apply it twice to get the correct result:
sage: produit.apply_map(lambda x: x.trig_reduce().trig_reduce())
[ cos(theta1 + theta2 + theta3) -sin(theta1 + theta2 + theta3)]
[ sin(theta1 + theta2 + theta3) cos(theta1 + theta2 + theta3)]Fri, 08 Nov 2019 16:50:23 +0100https://ask.sagemath.org/question/48674/trigonometric-simplifications-and-matrices/?answer=48675#post-id-48675Comment by Jean-Sébastien for <p>Apparently <code>trig_reduce</code> is not idempotent and you have to apply it twice to get the correct result:</p>
<pre><code>sage: produit.apply_map(lambda x: x.trig_reduce().trig_reduce())
[ cos(theta1 + theta2 + theta3) -sin(theta1 + theta2 + theta3)]
[ sin(theta1 + theta2 + theta3) cos(theta1 + theta2 + theta3)]
</code></pre>
https://ask.sagemath.org/question/48674/trigonometric-simplifications-and-matrices/?comment=48676#post-id-48676Wow, what is even more weird is that it seems that if you go with an even number of matrices, sage can simplify with one trig-reduce, but needs two for an odd number of matricesFri, 08 Nov 2019 17:49:54 +0100https://ask.sagemath.org/question/48674/trigonometric-simplifications-and-matrices/?comment=48676#post-id-48676Comment by tmonteil for <p>Apparently <code>trig_reduce</code> is not idempotent and you have to apply it twice to get the correct result:</p>
<pre><code>sage: produit.apply_map(lambda x: x.trig_reduce().trig_reduce())
[ cos(theta1 + theta2 + theta3) -sin(theta1 + theta2 + theta3)]
[ sin(theta1 + theta2 + theta3) cos(theta1 + theta2 + theta3)]
</code></pre>
https://ask.sagemath.org/question/48674/trigonometric-simplifications-and-matrices/?comment=48679#post-id-48679It might depend on how "complex" are the expressions.Fri, 08 Nov 2019 21:18:29 +0100https://ask.sagemath.org/question/48674/trigonometric-simplifications-and-matrices/?comment=48679#post-id-48679