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.
