DifferentialGeometry Lessons
Lesson 6: Transformations
Overview
Transformation, ApplyTransformation
Compose transformations
Find the inverse of a transformation
Define the identity transformation. Test if two transformations are equal. DGequal
Find the Jacobian Matrix for a transformation
Find the flow of a vector field. Find the infinitesimal transformations (vector fields) for a multi-parameter group of transformations.
Exercises
In this lesson, you will learn to do the following:
Define a transformation between two manifolds.
Apply a transformation to a point.
Compose two transformations.
Find the inverse of a transformation.
Define the identity transformation.
Test for the equality of two transformations.
Compute the Jacobian of a transformation.
Find the flow of a vector field.
with(DifferentialGeometry):
DGsetup([x, y], M):
DGsetup([u, v], N):
To define a transformation from the manifold M to the manifold N, use the Transformation command. The arguments are the domain frame name, the range frame name, and a list of equations defining the map, one equation for each coordinate in the range.
phi := Transformation(M, N, [u = x^2 + y^2, v = 2*x*y]);
φ ≔ u=x2+y2,v=2⁢x⁢y
Like all objects in the DifferentialGeometry environment, a transformation has its own internal representation. This internal representation of a transformation includes the Jacobian of the map.
op(phi);
The data contained in this internal representation can be obtained using the DGinfo command. For example:
Tools:-DGinfo(phi,"DomainFrame");
M
Tools:-DGinfo(phi, "RangeFrame");
N
Tools:-DGinfo(phi, "JacobianMatrix");
To apply the transformation to a point, use the ApplyTransformation command -- the second argument is the coordinates of a point in the domain frame. Note that the active frame changes to the range space after the invocation of the ApplyTransformation command.
ApplyTransformation(phi, [3, 4]);
25,24
Tools:-DGinfo("CurrentFrame");
ApplyTransformation(phi, [x = a, y = b]);
u=a2+b2,v=2⁢a⁢b
Note that a transformation can be defined from a coordinate system to itself.
psi := Transformation(M, M,[x = 2*x + 3*y + 1, y = -x + 2*y + 3]);
ψ ≔ x=2⁢x+3⁢y+1,y=−x+2⁢y+3
The composition of transformations is performed with the ComposeTransformations command.
DGsetup([x, y], M1):
DGsetup([u, v], M2):
DGsetup([r, s], M3):
DGsetup([t], M4);
frame name: M4
phi := Transformation(M1, M2, [u = 3*x, v = y/2]);
φ ≔ u=3⁢x,v=y2
psi := Transformation(M2, M3, [r = u^2, s = 1/v]);
ψ ≔ r=u2,s=1v
sigma := Transformation(M4, M1, [x = sin(t), y = cos(t)]);
σ ≔ x=sin⁡t,y=cos⁡t
ComposeTransformations(psi, phi);
r=9⁢x2,s=2y
More than two transformations can be composed with a single call to ComposeTransformation.
ComposeTransformations(psi, phi, sigma);
r=9⁢sin⁡t2,s=2cos⁡t
The DifferentialGeometry command InverseTransformation uses the Maple solve command to find the inverse of a transformation. All possible inverse functions are calculated. With one argument, the first solution is returned -- this may change from one Maple session to another.
With the second argument branch = "all",all solutions are returned. With the second argument branch = [pt1, pt2], where pt1 is in the range and point pt2 is in the domain, InverseTransformation returns the inverse transformation which sends pt1 to pt2.
Define a transformation psi and calculate its inverse.
psi := Transformation(M1, M2, [u = x^2 + y^2, v = 2*x*y]);
ψ ≔ u=x2+y2,v=2⁢x⁢y
InverseTransformation(psi);
x=12⁢vRootOf⁡−4⁢u⁢_Z2+v2+4⁢_Z4,y=RootOf⁡−4⁢u⁢_Z2+v2+4⁢_Z4
Set the Maple global variable _EnvExplicit to true to get explicit solutions.
_EnvExplicit := true;
_EnvExplicit ≔ true
x=v2⁢u+v2+u−v2,y=u+v2+u−v2
InverseTransformation(psi, branch = "all");
x=v2⁢u+v2+u−v2,y=u+v2+u−v2,x=v2⁢u+v2−u−v2,y=u+v2−u−v2,x=v2⁢−u+v2+u−v2,y=−u+v2+u−v2,x=v2⁢−u+v2−u−v2,y=−u+v2−u−v2
InverseTransformation(psi, branch = [[2, 2], [1, 1]]);
InverseTransformation(psi, branch = [[2, 2], [-1, -1]]);
x=v2⁢−u+v2+u−v2,y=−u+v2+u−v2
The commands IdentityTransformation and DGequal are found in the package Tools.
with(DifferentialGeometry): with(Tools):
DGsetup([x, y, z], E3):
phi := IdentityTransformation();
φ ≔ x=x,y=y,z=z
psi := Transformation(E3, E3, [x = x, y = y, z = z]);
ψ ≔ x=x,y=y,z=z
DGequal(phi, psi);
true
The command DGinfo/JacobianMatrix returns the Jacobian matrix of a transformation.
DGsetup([x, y], M): DGsetup([u, v], N):
psi := Transformation(M, N, [u = exp(x)*sin(y), v = exp(x)*cos(y)]):
Tools:-DGinfo(psi, "JacobianMatrix");
The command Flow uses the Maple dsolve command to compute the flow of a vector field. The command InfinitesimalTransformation is the inverse to the command Flow, it calculates the vector field defined by a r-parameter group of transformations.
DGsetup([x, y], E2);
frame name: E2
X := evalDG(-y*D_x + x*D_y);
X ≔ −y⁢D_x+x⁢D_y
Rot := Flow(X, theta);
Rot ≔ x=−y⁢sin⁡θ+x⁢cos⁡θ,y=y⁢cos⁡θ+x⁢sin⁡θ
Tx := Flow(D_x, a);
Tx ≔ x=a+x,y=y
Ty := Flow(D_y, b);
Ty ≔ x=x,y=b+y
Composing these three transformations gives the group of Euclidean motions in the plane.
psi := ComposeTransformations(Ty, Tx, Rot);
ψ ≔ x=a−y⁢sin⁡θ+x⁢cos⁡θ,y=b+y⁢cos⁡θ+x⁢sin⁡θ
The command InfinitesimalTransformation is the inverse to the command Flow, it calculates the vector fields defined by an r-parameter group of transformations.
InfinitesimalTransformation(psi, [theta, a, b]);
−y⁢D_x+x⁢D_y,D_x,D_y
Exercise 1
Check, by means of an example, the chain rule for the Jacobian of the composition of two maps.
Solution
DGsetup([x, y], E2):
DGsetup([u, v, w], E3):
DGsetup([p, q], M):
phi := Transformation(E2, E3,[u = x*y, v = x*z, w = y*z]);
φ ≔ u=x⁢y,v=x⁢z,w=y⁢z
psi := Transformation(E3, M, [p = u/v, q = w/v]);
ψ ≔ p=uv,q=wv
sigma := ComposeTransformations(psi, phi);
σ ≔ p=yz,q=yx
J1 := Tools:-DGinfo(phi, "JacobianMatrix");
J2 := Tools:-DGinfo(psi, "JacobianMatrix");
To verify the chain rule, we have to evaluate this matrix at psi. In the next lesson (Lesson 6), we shall see how to do this with the Pushforward command, but for now we just use the subs command.
J2psi := map2(subs, {u = x*y, v = x*z, w = y*z}, J2);
J3 := Tools:-DGinfo(sigma, "JacobianMatrix");
evalm(J3 - J2psi &* J1);
0000
Exercise 2
DGsetup([x,y], M2):
DGsetup([u,v], N2):
DGsetup([x, y, z], M3):
DGsetup([t], R):
[i] At what points do the following maps fail to be a local diffeomorphism?
(a)
phi1 := Transformation(M2, N2, [u = x/(1 + x^2 + y^2), v = y/(1 + x^2 + y^2)]);
φ1 ≔ u=x1+x2+y2,v=y1+x2+y2
(b)
phi2 := Transformation(M3, M3, [x = x + y + z, y = 1/2*(x^2 + y^2 + z^2), z = 1/3*(x^3 + y^3 + z^3)]);
φ2 ≔ x=x+y+z,y=x22+y22+z22,z=x33+y33+z33
[ii] At what points do the following maps fail to be local immersions?
phi3 := Transformation(N2, M3, [x = u*v, y = u + v, z = u^2 + v^2]);
φ3 ≔ x=u⁢v,y=u+v,z=u2+v2
phi4 := Transformation(R, M3, [x = t, y = 1/sqrt(2)*t^2, z = 1/3*t^3]);
φ4 ≔ x=t,y=2⁢t22,z=t33
[i](a)
J := Tools:-DGinfo(phi1, "JacobianMatrix");
d := LinearAlgebra:-Determinant(J);
d ≔ −x2+y2−11+x2+y23
The map phi1 fails to be a local diffeomorphism at points on the unit circle x^2 + y^2 = 1.
[i](b)
J := Tools:-DGinfo(phi2, "JacobianMatrix");
d := factor(LinearAlgebra:-Determinant(J));
d ≔ −−z+y⁢x−z⁢x−y
The map phi2 fails to be a local diffeomorphism at points on the lines x = y, x = z, or y = z.
[ii](a) The map phi2 fails to be a local immersion at points where the Jacobian has rank 1, that is, at points where the 2 x 2 sub-determinants of the Jacobian matrix vanish.
J := Tools:-DGinfo(phi3, "JacobianMatrix");
J1 := LinearAlgebra:-SubMatrix(J, [1, 2], [1, 2]);
J2 := LinearAlgebra:-SubMatrix(J, [1, 3], [1, 2]);
J3 := LinearAlgebra:-SubMatrix(J, [2, 3], [1, 2]);
use LinearAlgebra in eq := Determinant(J1)^2 + Determinant(J2)^2 + Determinant(J3)^2 end;
eq ≔ v−u2+2⁢v2−2⁢u22+2⁢v−2⁢u2
factor(%);
4⁢v2+8⁢u⁢v+5+4⁢u2⁢v−u2
Thus phi3 fails to be a local immersion at points where u = v.
[ii](b)
J := Tools:-DGinfo(phi4, "JacobianMatrix");
factor((J[1, 1]^2 + J[2, 1]^2 + J[3, 1]^2));
1+t22
The map phi4 is a local immersion at all points.
Exercise 3
Find the flow phi_t of each of the following vector fields and check that phi_t o phi_s = phi_(t + s) and (phi_t)^(-1) = phi_(-t).
DGsetup([u, v, w], N):
[i]
X1 := evalDG(x*y*D_x - y^2*D_y);
X1 ≔ x⁢y⁢D_x−y2⁢D_y
[ii]
ChangeFrame(N):
X2 := evalDG(v*D_u - u*D_v + w*D_w);
X2 ≔ v⁢D_u−u⁢D_v+w⁢D_w
phi := simplify(Flow(X, t));
φ ≔ x=−y⁢sin⁡t+x⁢cos⁡t,y=y⁢cos⁡t+x⁢sin⁡t
InfinitesimalTransformation(phi, [t]);
−y⁢D_x+x⁢D_y
phi1 := phi:
phi2 := eval(phi, t = s);
φ2 ≔ x=−y⁢sin⁡s+x⁢cos⁡s,y=y⁢cos⁡s+x⁢sin⁡s
phi3 := eval(phi, t = t + s);
φ3 ≔ x=−y⁢sin⁡t+s+x⁢cos⁡t+s,y=y⁢cos⁡t+s+x⁢sin⁡t+s
phi4 := ComposeTransformations(phi1, phi2);
φ4 ≔ x=−y⁢cos⁡s+x⁢sin⁡s⁢sin⁡t+−y⁢sin⁡s+x⁢cos⁡s⁢cos⁡t,y=y⁢cos⁡s+x⁢sin⁡s⁢cos⁡t+−y⁢sin⁡s+x⁢cos⁡s⁢sin⁡t
phi4 := DGmap(1, collect, phi4, [x, y]);
φ4 ≔ x=−sin⁡s⁢sin⁡t+cos⁡s⁢cos⁡t⁢x+−cos⁡s⁢sin⁡t−sin⁡s⁢cos⁡t⁢y,y=sin⁡s⁢cos⁡t+cos⁡s⁢sin⁡t⁢x+−sin⁡s⁢sin⁡t+cos⁡s⁢cos⁡t⁢y
Check that phi_(-t) is the inverse of phi_t.
phi5 := eval(phi, t = -t);
φ5 ≔ x=y⁢sin⁡t+x⁢cos⁡t,y=y⁢cos⁡t−x⁢sin⁡t
phi6 := ComposeTransformations(phi1, phi5);
φ6 ≔ x=−y⁢cos⁡t−x⁢sin⁡t⁢sin⁡t+y⁢sin⁡t+x⁢cos⁡t⁢cos⁡t,y=y⁢cos⁡t−x⁢sin⁡t⁢cos⁡t+y⁢sin⁡t+x⁢cos⁡t⁢sin⁡t
simplify(phi6);
x=x,y=y
psi := Flow(X2, t);
ψ ≔ u=v⁢sin⁡t+u⁢cos⁡t,v=v⁢cos⁡t−u⁢sin⁡t,w=w⁢ⅇt
InfinitesimalTransformation(psi, [t]);
v⁢D_u−u⁢D_v+w⁢D_w
psi1 := psi:
psi2 := eval(psi, t = s);
ψ2 ≔ u=v⁢sin⁡s+u⁢cos⁡s,v=v⁢cos⁡s−u⁢sin⁡s,w=w⁢ⅇs
psi3 := eval(psi, t = t + s);
ψ3 ≔ u=v⁢sin⁡t+s+u⁢cos⁡t+s,v=v⁢cos⁡t+s−u⁢sin⁡t+s,w=w⁢ⅇt+s
map(expand, psi3);
u=v⁢sin⁡s⁢cos⁡t+v⁢cos⁡s⁢sin⁡t−u⁢sin⁡s⁢sin⁡t+u⁢cos⁡s⁢cos⁡t,v=−v⁢sin⁡s⁢sin⁡t+v⁢cos⁡s⁢cos⁡t−u⁢sin⁡s⁢cos⁡t−u⁢cos⁡s⁢sin⁡t,w=w⁢ⅇt⁢ⅇs
psi4 := map(expand, ComposeTransformations(psi1, psi2));
ψ4 ≔ u=v⁢sin⁡s⁢cos⁡t+v⁢cos⁡s⁢sin⁡t−u⁢sin⁡s⁢sin⁡t+u⁢cos⁡s⁢cos⁡t,v=−v⁢sin⁡s⁢sin⁡t+v⁢cos⁡s⁢cos⁡t−u⁢sin⁡s⁢cos⁡t−u⁢cos⁡s⁢sin⁡t,w=w⁢ⅇt⁢ⅇs
Check that psi_(-t) is the inverse of psi_t.
psi5 := eval(psi, t = -t);
ψ5 ≔ u=−v⁢sin⁡t+u⁢cos⁡t,v=v⁢cos⁡t+u⁢sin⁡t,w=w⁢ⅇ−t
psi6 := ComposeTransformations(psi1, psi5);
ψ6 ≔ u=v⁢cos⁡t+u⁢sin⁡t⁢sin⁡t+−v⁢sin⁡t+u⁢cos⁡t⁢cos⁡t,v=v⁢cos⁡t+u⁢sin⁡t⁢cos⁡t−−v⁢sin⁡t+u⁢cos⁡t⁢sin⁡t,w=w⁢ⅇ−t⁢ⅇt
simplify(psi6);
u=u,v=v,w=w
Exercise 4
Find the infinitesimal generators for the action of the general linear group GL2 on the plane.
restart:with(DifferentialGeometry): DGsetup([x, y], E2):
phi := Transformation(E2, E2, [x = a*x + b*y, y = c*x + d*y]);
φ ≔ x=a⁢x+b⁢y,y=c⁢x+d⁢y
InfinitesimalTransformation(phi, [a, c, b, d], [a = 1, b = 0, c = 0, d = 1]);
x⁢D_x,x⁢D_y,y⁢D_x,y⁢D_y
Download Help Document