Lesson 6: Transformations - Maple Help
For the best experience, we recommend viewing online help using Google Chrome or Microsoft Edge.

Online Help

All Products    Maple    MapleSim


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

Overview

 

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.

 

Transformation, ApplyTransformation

 

>

with(DifferentialGeometry):

DGsetup([x, y], M):

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.

N > 

phi := Transformation(M, N, [u = x^2 + y^2, v = 2*x*y]);

φu=x2+y2,v=2xy

(2.1)

 

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.  

M > 

op(phi);

 

The data contained in this internal representation can be obtained using the DGinfo command. For example:

M > 

Tools:-DGinfo(phi,"DomainFrame");

M

(2.2)
M > 

Tools:-DGinfo(phi, "RangeFrame");

N

(2.3)
M > 

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.

M

(2.4)
M > 

ApplyTransformation(phi, [3, 4]);

25,24

(2.5)
N > 

Tools:-DGinfo("CurrentFrame");

N

(2.6)
N > 

ApplyTransformation(phi, [x = a, y = b]);

u=a2+b2,v=2ab

(2.7)

 

Note that a transformation can be defined from a coordinate system to itself.

N > 

psi := Transformation(M, M,[x = 2*x + 3*y + 1, y = -x + 2*y + 3]);

ψx=2x+3y+1,y=x+2y+3

(2.8)

 

Compose transformations

 

The composition of transformations is performed with the ComposeTransformations command.

M > 

with(DifferentialGeometry):

M > 

DGsetup([x, y], M1):

M1 > 

DGsetup([u, v], M2):

M2 > 

DGsetup([r, s], M3):

M3 > 

DGsetup([t], M4);

frame name: M4

(3.1)
M4 > 

phi := Transformation(M1, M2, [u = 3*x, v = y/2]);

φu=3x,v=y2

(3.2)
M1 > 

psi := Transformation(M2, M3, [r = u^2, s = 1/v]);

ψr=u2,s=1v

(3.3)
M2 > 

sigma := Transformation(M4, M1, [x = sin(t), y = cos(t)]);

σx=sint,y=cost

(3.4)
M4 > 

ComposeTransformations(psi, phi);

r=9x2,s=2y

(3.5)

 

More than two transformations can be composed with a single call to ComposeTransformation.

M1 > 

ComposeTransformations(psi, phi, sigma);

r=9sint2,s=2cost

(3.6)

 

Find the inverse of a transformation

 

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.

 

M4 > 

with(DifferentialGeometry):

M4 > 

DGsetup([x, y], M1):

M1 > 

DGsetup([u, v], M2):

 

Define a transformation psi and calculate its inverse.

M2 > 

psi := Transformation(M1, M2, [u = x^2 + y^2, v = 2*x*y]);

ψu=x2+y2,v=2xy

(4.1)
M1 > 

InverseTransformation(psi);

x=12vRootOf4u_Z2+v2+4_Z4,y=RootOf4u_Z2+v2+4_Z4

(4.2)

 

Set the Maple global variable _EnvExplicit to true to get explicit solutions.

M2 > 

_EnvExplicit := true;

_EnvExplicittrue

(4.3)
M2 > 

InverseTransformation(psi);

x=v2u+v2+uv2,y=u+v2+uv2

(4.4)
M2 > 

InverseTransformation(psi, branch = "all");

x=v2u+v2+uv2,y=u+v2+uv2,x=v2u+v2uv2,y=u+v2uv2,x=v2u+v2+uv2,y=u+v2+uv2,x=v2u+v2uv2,y=u+v2uv2

(4.5)
M2 > 

InverseTransformation(psi, branch = [[2, 2], [1, 1]]);

x=v2u+v2+uv2,y=u+v2+uv2

(4.6)
M1 > 

InverseTransformation(psi, branch = [[2, 2], [-1, -1]]);

x=v2u+v2+uv2,y=u+v2+uv2

(4.7)

 

Define the identity transformation.  Test if two transformations are equal.  DGequal

 

The commands IdentityTransformation and DGequal are found in the package Tools.

M1 > 

with(DifferentialGeometry): with(Tools):

M1 > 

DGsetup([x, y, z], E3):

E3 > 

phi := IdentityTransformation();

φx=x,y=y,z=z

(5.1)
E3 > 

psi := Transformation(E3, E3, [x = x, y = y, z = z]);

ψx=x,y=y,z=z

(5.2)
E3 > 

DGequal(phi, psi);

true

(5.3)

 

Find the Jacobian Matrix for a transformation

 

The command DGinfo/JacobianMatrix returns the Jacobian matrix of a transformation.

E3 > 

with(DifferentialGeometry):

E3 > 

DGsetup([x, y], M): DGsetup([u, v], N):

N > 

psi := Transformation(M, N, [u = exp(x)*sin(y), v = exp(x)*cos(y)]):

M > 

Tools:-DGinfo(psi, "JacobianMatrix");

 

Find the flow of a vector field. Find the infinitesimal transformations (vector fields) for a multi-parameter group of transformations.

 

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.

M > 

with(DifferentialGeometry):

M > 

DGsetup([x, y], E2);

frame name: E2

(7.1)
E2 > 

X := evalDG(-y*D_x + x*D_y);

XyD_x+xD_y

(7.2)
E2 > 

Rot := Flow(X, theta);

Rotx=ysinθ+xcosθ,y=ycosθ+xsinθ

(7.3)
E2 > 

Tx := Flow(D_x, a);

Txx=a+x,y=y

(7.4)
E2 > 

Ty := Flow(D_y, b);

Tyx=x,y=b+y

(7.5)

 

Composing these three transformations gives the group of Euclidean motions in the plane.

E2 > 

psi := ComposeTransformations(Ty, Tx, Rot);

ψx=aysinθ+xcosθ,y=b+ycosθ+xsinθ

(7.6)

 

The command InfinitesimalTransformation is the inverse to the command Flow, it calculates the vector fields defined by an r-parameter group of transformations.

E2 > 

InfinitesimalTransformation(psi, [theta, a, b]);

yD_x+xD_y,D_x,D_y

(7.7)

 

Exercises

Exercise 1

 

Check, by means of an example, the chain rule for the Jacobian of the composition of two maps.

 

Solution

 

E2 > 

with(DifferentialGeometry):

E2 > 

DGsetup([x, y], E2):

E2 > 

DGsetup([u, v, w], E3):

E3 > 

DGsetup([p, q], M):

M > 

phi := Transformation(E2, E3,[u = x*y, v = x*z, w = y*z]);

φu=xy,v=xz,w=yz

(8.1.1.1)
E2 > 

psi := Transformation(E3, M, [p = u/v, q = w/v]);

ψp=uv,q=wv

(8.1.1.2)
E3 > 

sigma := ComposeTransformations(psi, phi);

σp=yz,q=yx

(8.1.1.3)
E2 > 

J1 := Tools:-DGinfo(phi, "JacobianMatrix");

E2 > 

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.

E2 > 

J2psi := map2(subs, {u = x*y, v = x*z, w = y*z}, J2);

E2 > 

J3 := Tools:-DGinfo(sigma, "JacobianMatrix");

E2 > 

evalm(J3 - J2psi &* J1);

0000

(8.1.1.4)

Exercise 2

 

E2 > 

with(DifferentialGeometry):

E2 > 

DGsetup([x,y], M2):

M2 > 

DGsetup([u,v], N2):

N2 > 

DGsetup([x, y, z], M3):

M3 > 

DGsetup([t], R):

 

[i] At what points do the following maps fail to be a local diffeomorphism?

 

(a)

R > 

phi1 := Transformation(M2, N2, [u = x/(1 + x^2 + y^2), v = y/(1 + x^2 + y^2)]);

φ1u=x1+x2+y2,v=y1+x2+y2

(8.2.1)

 

(b)

M2 > 

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)]);

φ2x=x+y+z,y=x22+y22+z22,z=x33+y33+z33

(8.2.2)

 

[ii] At what points do the following maps fail to be local immersions?

 

(a)

M3 > 

phi3 := Transformation(N2, M3, [x = u*v, y = u + v, z = u^2 + v^2]);

φ3x=uv,y=u+v,z=u2+v2

(8.2.3)

 

(b)

N2 > 

phi4 := Transformation(R, M3, [x = t, y = 1/sqrt(2)*t^2, z = 1/3*t^3]);

φ4x=t,y=2t22,z=t33

(8.2.4)

 

Solution

 

[i](a)

R > 

J := Tools:-DGinfo(phi1, "JacobianMatrix");

R > 

d := LinearAlgebra:-Determinant(J);

dx2+y211+x2+y23

(8.2.1.1)

The map phi1 fails to be a local diffeomorphism at points on the unit circle x^2 + y^2 = 1.

 

[i](b)

M2 > 

J := Tools:-DGinfo(phi2, "JacobianMatrix");

R > 

d := factor(LinearAlgebra:-Determinant(J));

dz+yxzxy

(8.2.1.2)

 

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.

R > 

J := Tools:-DGinfo(phi3, "JacobianMatrix");

R > 

J1 := LinearAlgebra:-SubMatrix(J, [1, 2], [1, 2]);

R > 

J2 := LinearAlgebra:-SubMatrix(J, [1, 3], [1, 2]);

R > 

J3 := LinearAlgebra:-SubMatrix(J, [2, 3], [1, 2]);

R > 

use LinearAlgebra in eq := Determinant(J1)^2 + Determinant(J2)^2 + Determinant(J3)^2 end;

eqvu2+2v22u22+2v2u2

(8.2.1.3)
R > 

factor(%);

4v2+8uv+5+4u2vu2

(8.2.1.4)

 

Thus phi3 fails to be a local immersion at points where u = v.

 

[ii](b)

R > 

J := Tools:-DGinfo(phi4, "JacobianMatrix");

R > 

factor((J[1, 1]^2 + J[2, 1]^2 + J[3, 1]^2));

1+t22

(8.2.1.5)

 

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).

 

R > 

with(DifferentialGeometry):

R > 

DGsetup([x, y], M):

M > 

DGsetup([u, v, w], N):

 

[i]

N > 

X1 := evalDG(x*y*D_x - y^2*D_y);

X1xyD_xy2D_y

(8.3.1)

 

[ii]

M > 

ChangeFrame(N):

N > 

X2 := evalDG(v*D_u - u*D_v + w*D_w);

X2vD_uuD_v+wD_w

(8.3.2)

 

Solution

 

[i]

N > 

phi := simplify(Flow(X, t));

φx=ysint+xcost,y=ycost+xsint

(8.3.1.1)
E2 > 

InfinitesimalTransformation(phi, [t]);

yD_x+xD_y

(8.3.1.2)
E2 > 

phi1 := phi:

E2 > 

phi2 := eval(phi, t = s);

φ2x=ysins+xcoss,y=ycoss+xsins

(8.3.1.3)
E2 > 

phi3 := eval(phi, t = t + s);

φ3x=ysint+s+xcost+s,y=ycost+s+xsint+s

(8.3.1.4)
E2 > 

phi4 := ComposeTransformations(phi1, phi2);

φ4x=ycoss+xsinssint+ysins+xcosscost,y=ycoss+xsinscost+ysins+xcosssint

(8.3.1.5)
E2 > 

phi4 := DGmap(1, collect, phi4, [x, y]);

φ4x=sinssint+cosscostx+cosssintsinscosty,y=sinscost+cosssintx+sinssint+cosscosty

(8.3.1.6)

 

Check that phi_(-t) is the inverse of phi_t.

E2 > 

phi5 := eval(phi, t = -t);

φ5x=ysint+xcost,y=ycostxsint

(8.3.1.7)
E2 > 

phi6 := ComposeTransformations(phi1, phi5);

φ6x=ycostxsintsint+ysint+xcostcost,y=ycostxsintcost+ysint+xcostsint

(8.3.1.8)
E2 > 

simplify(phi6);

x=x,y=y

(8.3.1.9)

 

[ii]

E2 > 

psi := Flow(X2, t);

ψu=vsint+ucost,v=vcostusint,w=wⅇt

(8.3.1.10)
N > 

InfinitesimalTransformation(psi, [t]);

vD_uuD_v+wD_w

(8.3.1.11)
N > 

psi1 := psi:

N > 

psi2 := eval(psi, t = s);

ψ2u=vsins+ucoss,v=vcossusins,w=wⅇs

(8.3.1.12)
N > 

psi3 := eval(psi, t = t + s);

ψ3u=vsint+s+ucost+s,v=vcost+susint+s,w=wⅇt+s

(8.3.1.13)
N > 

map(expand, psi3);

u=vsinscost+vcosssintusinssint+ucosscost,v=vsinssint+vcosscostusinscostucosssint,w=wⅇtⅇs

(8.3.1.14)
N > 

psi4 := map(expand, ComposeTransformations(psi1, psi2));

ψ4u=vsinscost+vcosssintusinssint+ucosscost,v=vsinssint+vcosscostusinscostucosssint,w=wⅇtⅇs

(8.3.1.15)

 

Check that psi_(-t) is the inverse of psi_t.

N > 

psi5 := eval(psi, t = -t);

ψ5u=vsint+ucost,v=vcost+usint,w=wⅇt

(8.3.1.16)
N > 

psi6 := ComposeTransformations(psi1, psi5);

ψ6u=vcost+usintsint+vsint+ucostcost,v=vcost+usintcostvsint+ucostsint,w=wⅇtⅇt

(8.3.1.17)
N > 

simplify(psi6);

u=u,v=v,w=w

(8.3.1.18)

Exercise 4

 

Find the infinitesimal generators for the action of the general linear group GL2 on the plane.

 

Solution

 

N > 

restart:with(DifferentialGeometry): DGsetup([x, y], E2):

E2 > 

phi := Transformation(E2, E2, [x = a*x + b*y, y = c*x + d*y]);

φx=ax+by,y=cx+dy

(8.4.1.1)
E2 > 

InfinitesimalTransformation(phi, [a, c, b, d], [a = 1, b = 0, c = 0, d = 1]);

xD_x,xD_y,yD_x,yD_y

(8.4.1.2)
E2 >