Revision history [back]

Transformation of derivative

Consider the following code. When it display the connection coefficient in the Y frame at the end, we obtain derivative expressions that are quite complicated (for example derivative with respect to "r sin(\theta)". I would rather expect simpler expressions containing derivatives with respect to \lambda, \theta or r alone. Like what I would obtain by applying the "textbook" transformation rules for the partial derivatives.

M = Manifold(4, 'M', latex_name=r'\mathcal{M}')
X.<t,x,y,z> = M.chart()
U = M.open_subset('U', coord_def={X: (y!=0, x<0)})
X_U = X.restrict(U)
var('l', latex_name='\lambda')
Y.<t,l,th,r> = U.chart(r't:(0,+oo) l:(0,pi) th:(0,2*pi):\theta r:(0,+oo)')

Omega = var('Omega')
transit_Y_to_X = Y.transition_map(X_U, [t, r*cos(th)*cos(l+Omega*t), r*cos(th)*sin(l+Omega*t), r*sin(th)])
transit_Y_to_X.set_inverse(t, atan2(y, x) - Omega*t, atan2(z, sqrt(x^2+y^2)), sqrt(x^2+y^2+z^2))

nabla = M.affine_connection('nabla', r'\nabla')
phi = M.scalar_field(function('Phi', latex_name='\Phi')(x, y, z), name='phi', latex_name='\phi')
e = X_U.frame()

nabla[1,0,0] = e[1](phi).expr()
nabla.display(coordinate_labels=False, only_nonredundant=True)

nabla.display(frame=Y.frame(), chart=Y, coordinate_labels=False, only_nonredundant=True)


Transformation of derivative

Consider the following code. When it display the connection coefficient in the Y frame at the end, we obtain derivative expressions that are quite complicated (for example derivative with respect to "r sin(\theta)". I would rather expect simpler expressions containing derivatives with respect to \lambda, \theta or r alone. Like what I would obtain by applying the "textbook" transformation rules for the partial derivatives.

M = Manifold(4, 'M', latex_name=r'\mathcal{M}')
X.<t,x,y,z> = M.chart()
U = M.open_subset('U', coord_def={X: (y!=0, x<0)})
X_U = X.restrict(U)
var('l', latex_name='\lambda')
Y.<t,l,th,r> = U.chart(r't:(0,+oo) l:(0,pi) th:(0,2*pi):\theta r:(0,+oo)')

Omega = var('Omega')
transit_Y_to_X = Y.transition_map(X_U, [t, r*cos(th)*cos(l+Omega*t), r*cos(th)*sin(l+Omega*t), r*sin(th)])
transit_Y_to_X.set_inverse(t, atan2(y, x) - Omega*t, atan2(z, sqrt(x^2+y^2)), sqrt(x^2+y^2+z^2))

nabla = M.affine_connection('nabla', r'\nabla')
phi = M.scalar_field(function('Phi', latex_name='\Phi')(x, y, z), name='phi', latex_name='\phi')
e = X_U.frame()

nabla[1,0,0] = e[1](phi).expr()
nabla.display(coordinate_labels=False, only_nonredundant=True)

nabla.display(frame=Y.frame(), chart=Y, coordinate_labels=False, only_nonredundant=True)


Transformation of derivativederivative under a change of chart

Consider the following code. When it display the connection coefficient in the Y frame at the end, we obtain derivative expressions that are quite complicated (for example derivative with respect to "r sin(\theta)". I would rather expect simpler expressions containing derivatives with respect to \lambda, \theta or r alone. Like what I would obtain by applying the "textbook" transformation rules for the partial derivatives.

M = Manifold(4, 'M', latex_name=r'\mathcal{M}')
X.<t,x,y,z> = M.chart()
U = M.open_subset('U', coord_def={X: (y!=0, x<0)})
X_U = X.restrict(U)
var('l', latex_name='\lambda')
Y.<t,l,th,r> = U.chart(r't:(0,+oo) l:(0,pi) th:(0,2*pi):\theta r:(0,+oo)')

Omega = var('Omega')
transit_Y_to_X = Y.transition_map(X_U, [t, r*cos(th)*cos(l+Omega*t), r*cos(th)*sin(l+Omega*t), r*sin(th)])
transit_Y_to_X.set_inverse(t, atan2(y, x) - Omega*t, atan2(z, sqrt(x^2+y^2)), sqrt(x^2+y^2+z^2))

nabla = M.affine_connection('nabla', r'\nabla')
phi = M.scalar_field(function('Phi', latex_name='\Phi')(x, y, z), name='phi', latex_name='\phi')
e = X_U.frame()

nabla[1,0,0] = e[1](phi).expr()
nabla.display(coordinate_labels=False, only_nonredundant=True)

nabla.display(frame=Y.frame(), chart=Y, coordinate_labels=False, only_nonredundant=True)