Great! I'll try this out. Thanks for the work around.

Joe

On Mar 13, 10:31 pm, Aaron Meurer <[email protected]> wrote:
> Unfortunately, this is a limitation in SymPy right now, which is that
> our trigonometric simplification is not very good.
>
> For now, you can use a work-around suggested in another thread:
>
> def mytrigsimp(expr):
>     expr = expr.rewrite(exp)
>     expr = expr.expand()
>     expr = expr.rewrite(cos)
>     expr = expr.expand()
>     return expr
>
> and do skew.applyfunc(mytrigsimp).  This works by rewriting the trig
> functions in terms of complex exponentials, expanding, rewriting them
> back as trig functions, and expanding again.  In your case, it
> simplifies nicely:
>
> In [32]: def mytrigsimp(expr):
>    ....:         expr = expr.rewrite(exp)
>    ....:         expr = expr.expand()
>    ....:         expr = expr.rewrite(cos)
>    ....:         expr = expr.expand()
>    ....:         return expr
>    ....:
>
> In [33]: print skew.applyfunc(mytrigsimp)
> [
> 0, -sin(g(t))*Derivative(b(t), t) +
> cos(b(t))*cos(g(t))*Derivative(a(t), t),
> -sin(g(t))*cos(b(t))*Derivative(a(t), t) - cos(g(t))*Derivative(b(t),
> t)]
> [sin(g(t))*Derivative(b(t), t) - cos(b(t))*cos(g(t))*Derivative(a(t),
> t),
>     0,                     -sin(b(t))*Derivative(a(t), t) +
> Derivative(g(t), t)]
> [sin(g(t))*cos(b(t))*Derivative(a(t), t) + cos(g(t))*Derivative(b(t),
> t),                      sin(b(t))*Derivative(a(t), t) -
> Derivative(g(t), t),
>                      0]
>
> Aaron Meurer
>
>
>
>
>
>
>
> On Tue, Mar 13, 2012 at 8:13 PM, Southern.Cross <[email protected]> wrote:
> > Hello,
>
> > I'm new to sympy so please excuse me if this question is obvious to
> > the experienced.
>
> > In multibody kinematics there is a classic relationship between a
> > rotating body's angular velocity and the rotation matrices
> > representing the configuration at a given point in time. Basically, if
> > I am using a roll/pitch/yaw representation of the rotation then I have
> > three rotation matrices that comprise the full instantaneous rotation,
>
> > R =  rotx(gamma) * roty(beta) * rotz(alpha)
>
> > Meaning, if I rotate the body by 'alpha' about a body fixed 'Z' axis,
> > followed by a rotation 'beta' about the once rotated body fixed 'Y'
> > axis, followed by a rotation 'gamma' about the twice rotated body
> > fixed 'X' axis... I now have a complete instantaneous rotation matrix
> > R.
>
> > The relationship of the angular velocity of the body is,
>
> > skew(w) = Rdot * R.transpose
>
> > so, a new skew symmetric matrix is created from the matrix product
> > between the time derivative of R and the transpose of R. (Since alpha,
> > beta, and gamma are all functions of time then R is a function of
> > time.)
>
> > Completing the above described equations in Mathematica does in fact
> > give me a skew-symmetric matrix. However, my first attempt in SYMPY
> > did not produce a skew-symmetric matrix. So, I'm including the code
> > below and asking the group if there is a simple newbie user error I
> > may have performed causing the problem. Or, is this simply a
> > limitation of SYMPY?  By the way, TRIGSIMP() did not help...
>
> > <snip>
> > from sympy import *
>
> > t = Symbol('t')
> > a = Symbol('a')
> > b = Symbol('b')
> > g = Symbol('g')
>
> > rotX = Matrix([ [1,  0,         0],
> >                [0,  cos(g(t)), sin(g(t))],
> >                [0, -sin(g(t)), cos(g(t))] ])
> > rotY = Matrix([ [cos(b(t)),  0,         -sin(b(t))],
> >                [0,          1,          0],
> >                [sin(b(t)), 0,           cos(b(t))] ])
> > rotZ = Matrix([ [cos(a(t)),  sin(a(t)),  0],
> >                [-sin(a(t)),  cos(a(t)),  0],
> >                [0,          0,          1] ])
>
> > R = rotX * rotY * rotZ
> > Rdot = R.diff(t)
> > skew = Rdot * R.T
>
> > print ''
> > print 'skew = '
> > print skew
>
> > # 'skew' should result in a skew-symmetic matrix.
> > # or, of the form,
> > #  [[ 0,   -w_z,   w_y ],
> > #   [ w_z,  0,    -w_x],
> > #   [-w_y,  w_x,   0] ]
> > #
> > # where w = [w_x, w_y, w_z]^T
> > #
> > # looks like SYMPY fails to produce this results, yet, this same code
> > in
> > # Mathematica works as expected...
> > #
> > # is this a result of a "newbie" mistake? Or, a limitation of sympy?
>
> > print ''
> > print 'trigsimp(skew[0,0]) = '
> > print trigsimp(skew[0,0])
> > </snip>
>
> > Thanks in advance!
>
> > --
> > You received this message because you are subscribed to the Google Groups 
> > "sympy" group.
> > To post to this group, send email to [email protected].
> > To unsubscribe from this group, send email to 
> > [email protected].
> > For more options, visit this group 
> > athttp://groups.google.com/group/sympy?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sympy?hl=en.

Reply via email to