Alan Bromborsky wrote: > Vinzent Steinberg wrote: > >> On 1 déc, 21:28, Scott<scotta_2...@yahoo.com> wrote: >> >> >>> Is there a sympy function for making symbolic tensors? >>> Basically I want to treat 3x3 rotation tensor symbol that is constant >>> inside of an integral while preserving the tensor algebra (A*B .ne. >>> B*A). The 3x3 rotain tensor is multiplied by a 3x1 position tenosr >>> which is integrated. >>> >>> Is there a built in function for converting a 3*1 tensor to a skew >>> antisymetric cross product matrix then back again? >>> V/R >>> >>> Scott >>> >>> >> This is one of our oldest issues: >> http://code.google.com/p/sympy/issues/detail?id=16 >> >> You may have a look at the geometric algebra module, but there are no >> tensors in sympy yet. >> >> Vinzent >> >> -- >> >> You received this message because you are subscribed to the Google Groups >> "sympy" group. >> To post to this group, send email to sy...@googlegroups.com. >> To unsubscribe from this group, send email to >> sympy+unsubscr...@googlegroups.com. >> For more options, visit this group at >> http://groups.google.com/group/sympy?hl=en. >> >> >> >> >> > In geometric algebra rotations are done via rotors (spinors) as follows: > > For a the rotation of a vector x around an axis u (|u| = 1) through > an angle theta, the rotor is: > > R = cos(theta)-I*u*sin(theta) > > where I is the pseudo scalar (I=i*j*k if i, j, and k are orthogonal > basis vectors and * the geometric product). > The components of I*u form a rank 2 antisymmetric tensor. The > reverse of R, rev(R) is: > > rev(R) = cos(theta)+I*u*sin(theta) > > The rotated x, x' is then: > > x' = R*x*rev(R) > > where again * is the geometric product. > > What domain (path, area, or volume) do you want to integrate > R*x*rev(R) over? > > -- > > You received this message because you are subscribed to the Google Groups > "sympy" group. > To post to this group, send email to sy...@googlegroups.com. > To unsubscribe from this group, send email to > sympy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sympy?hl=en. > > > > Here is your example:
First the code - #!/usr/bin/python import sys import os,sympy,time from sympy.galgebra.GA import * from sympy import cos,sin set_main(sys.modules[__name__]) if __name__ == '__main__': make_symbols('a x y z') MV.setup('e',metric='[1,1,1]',coords=[x,y,z]) MV.set_str_format(1) u = MV('u','vector') x = MV('x','vector') print u print x print MV.I*u R = cos(a)-MV.I*u*sin(a/2) Rrev = R.rev() print R print Rrev MV.set_str_format(2) rot_x = R*x*Rrev rot_x.simplify() print rot_x Second the result - u__x*e_x+u__y*e_y+u__z*e_z x__x*e_x+x__y*e_y+x__z*e_z u__z*e_xe_y-u__y*e_xe_z+u__x*e_ye_z cos(a/2)-u__z*sin(a/2)*e_x^e_y+u__y*sin(a/2)*e_x^e_z-u__x*sin(a/2)*e_y^e_z cos(a/2)+u__z*sin(a/2)*e_x^e_y-u__y*sin(a/2)*e_x^e_z+u__x*sin(a/2)*e_y^e_z (-2*u__z*x__y*cos(a/2)*sin(a/2)+2*u__y*x__z*cos(a/2)*sin(a/2)+x__x*cos(a/2)**2+x__x*u__x**2*sin(a/2)**2-x__x*u__y**2*sin(a/2)**2-x__x*u__z**2*sin(a/2)**2+2*u__x*u__y*x__y*sin(a/2)**2+2*u__x*u__z*x__z*sin(a/2)**2)*e_x +(-2*u__x*x__z*cos(a/2)*sin(a/2)+2*u__z*x__x*cos(a/2)*sin(a/2)+x__y*cos(a/2)**2+x__y*u__y**2*sin(a/2)**2-x__y*u__x**2*sin(a/2)**2-x__y*u__z**2*sin(a/2)**2+2*u__x*u__y*x__x*sin(a/2)**2+2*u__y*u__z*x__z*sin(a/2)**2)*e_y +(-2*u__y*x__x*cos(a/2)*sin(a/2)+2*u__x*x__y*cos(a/2)*sin(a/2)+x__z*cos(a/2)**2+x__z*u__z**2*sin(a/2)**2-x__z*u__x**2*sin(a/2)**2-x__z*u__y**2*sin(a/2)**2+2*u__x*u__z*x__x*sin(a/2)**2+2*u__y*u__z*x__y*sin(a/2)**2)*e_z In the previous post I forgot you had to use the half-angle! -- You received this message because you are subscribed to the Google Groups "sympy" group. To post to this group, send email to sy...@googlegroups.com. To unsubscribe from this group, send email to sympy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sympy?hl=en.