# This maple sheet gives a proof of the rotation invariance of the Jacobian J_r in eq. (18)-(20), as well as the rotation invariance of the acceleration in eq. (21). restart; with(LinearAlgebra): # vector field V in sufficiently high Taylor expansion uf := uc + u_x*x + u_y*y + u_t*t+ (1/2)*u_xx*x*x+ (1/2)*u_yy*y*y+ (1/2)*u_tt*t*t+ (1/1)*u_xy*x*y+ (1/1)*u_xt*x*t+ (1/1)*u_yt*y*t: vf := vc + v_x*x + v_y*y + v_t*t+ (1/2)*v_xx*x*x+ (1/2)*v_yy*y*y+ (1/2)*v_tt*t*t+ (1/1)*v_xy*x*y+ (1/1)*v_xt*x*t+ (1/1)*v_yt*y*t: V := Vector([uf,vf]); # Jacobian JV of V uf_x := diff(uf,x); vf_x := diff(vf,x); uf_y := diff(uf,y); vf_y := diff(vf,y); uf_t := diff(uf,t); vf_t := diff(vf,t); JV := Matrix([ [uf_x,uf_y], [vf_x,vf_y]]); # time derivative of V V_t := Vector([uf_t,vf_t]); ############################################### # we start computing the rotation invariant Jacobian JVr of V by applying eq. (18)-(20) X := Vector([x,y]): X0 := Vector([x0,y0]): d := sqrt((x-x0)^2 + (y-y0)^2): rr := (X-X0)/d: rrp := Vector([rr[2],-rr[1]]): R := Matrix([ [rrp[1], rr[1]], [rrp[2], rr[2]]]): vr := Multiply(Transpose(V),rr): vrp := Multiply(Transpose(V),rrp): HV := Matrix([ [-vr, -vrp], [vrp, 0]]): # this is the rotation invariant Jacobian V of (18) JVr := JV + (1/d)*Multiply(Multiply(R,HV),Transpose(R)); # this is the rotation invariant acceleration of (21) AVr := Multiply(JVr,V) + V_t; ############################################### # now we compute the domain transformed vector field W # to show rotation invariance, we consider the domain transformation G of eq. (10) omega0 := 0; # this can be assumed without restriction of generality because we finally evaluate the taylor expansion at (0,0,0) # omega0 = 0 ensures that G(0,0,0)=H(0,0,0)=0,0. # auxiliary matrix for computing G P := Matrix([ [ cos(omega*t + omega0),sin(omega*t + omega0)], [-sin(omega*t + omega0),cos(omega*t + omega0)]]): PT := Transpose(P): # G from eq. (10) and its inverse G := Multiply(P,X-X0) + X0; H := Multiply(PT,X-X0) + X0; # test if G,H are indeed inverse: simplify(eval(H,{x=G[1],y=G[2]})); simplify(eval(G,{x=H[1],y=H[2]})); eval(H,{x=0,y=0,t=0}); eval(G,{x=0,y=0,t=0}); # we compute the domain transformed vector field W from the domain transformation G by applying eq. (4) G_t := Vector([diff(G[1],t),diff(G[2],t)]): H_t := Vector([diff(H[1],t),diff(H[2],t)]): NablaG := Matrix([ [diff(G[1],x), diff(G[1],y)], [diff(G[2],x), diff(G[2],y)]]): NablaH := Matrix([ [diff(H[1],x), diff(H[1],y)], [diff(H[2],x), diff(H[2],y)]]): NablaGI := simplify(MatrixInverse(NablaG)): NablaHI := simplify(MatrixInverse(NablaH)): VatH := eval(V,{x=H[1],y=H[2]}): # the vector field W of eq. (4) W := Multiply(NablaHI, VatH-H_t); # the Jacobian of W JW := Matrix([ [diff(W[1],x), diff(W[1],y)], [diff(W[2],x), diff(W[2],y)]]); # time derivative of W: W_t := Vector( [diff(W[1],t), diff(W[2],t) ]): ############################################### # now we compute the rotation invariant Jacobian of W by applying (18)-(20) to W: wr := Multiply(Transpose(W),rr): wrp := Multiply(Transpose(W),rrp): HW := Matrix([ [-wr, -wrp], [wrp, 0]]): # the rotation invariant Jacobian of W: JWr := JW + (1/d)*Multiply(Multiply(R,HW),Transpose(R)); # the rotation invariant acceleration of W: AWr := Multiply(JWr,W) + W_t; ############################################### # to test rotation invariance, we have to compare JVr(0,0,0) with JWr( G(0,0,0) ,0 ) = JWr(0,0,0): simplify((eval(JVr,{x=0,y=0,t=0}) - eval(JWr,{x=0,y=0,t=0}))); # if this is the zero matrix, the rotation invariance of JVr is shown simplify((eval(AVr,{x=0,y=0,t=0}) - eval(AWr,{x=0,y=0,t=0}))); # if this is the zero vector, the rotation invariance of AVr is shown