DifferentialGeometry Lessons
Lesson 1: Getting Started
Overview
DGsetup
DGinfo
ChangeFrame and RemoveFrame
Simplification
Exercises
In this lesson, you will learn to do the following:
Create coordinate systems.
Change coordinates.
List existing coordinate systems.
Remove coordinate systems from the Maple session.
Obtain various attributes of a defined coordinate system.
Control simplification of the output from DifferentialGeometry commands.
All DifferentialGeometry sessions begin by executing the DGsetup command. This command is used to setup the computation environment by creating coordinate systems, frames, Lie algebras, and so on. The DGsetup command can be used many times within a given Maple session.
with(DifferentialGeometry):
We first use DGsetup to create a coordinate system for a 2-dimensional manifold. We declare [x, y] to be the names of the coordinates and we name the manifold (or, more precisely, the coordinate patch for the manifold) E2.
DGsetup([x, y], E2, verbose);
The following coordinates have been protected:
x,y
The following vector fields have been defined and protected:
D_x,D_y
The following differential 1-forms have been defined and protected:
dx,dy
frame name: E2
At this point, the coordinate names have been protected and cannot be assigned values. The vectors D_x, D_y are assigned and protected; they define the coordinate basis for the tangent space of E2 at each point [x, y]. The differential 1-forms dx and dy are assigned and protected; they define the coordinate basis for the cotangent space of E2 at each point [x, y].
We will cover the basis operations involving vectors, forms and tensors in the next lesson.
Before proceeding, we remark that all the various geometric objects which arise in differential geometry have an internal representation within Maple which describes various attributes of the object as well as all the component values of the geometric object. A detailed understanding of this internal representation is not required to use any of the DifferentialGeometry commands -- here we simply wish to make the user aware of its existence. To display the internal representation of the vector field D_x and the 1-form dy, use the Maple lprint command.
lprint(D_x);
_DG([["vector", J2, []], [[[1], 1]]])
lprint(dy);
_DG([["form", J2, 1], [[[2], 1]]])
Notice that the internal representation of D_x clearly marks D_x as a geometric object of type "vector" attached to the manifold E2, while the internal representation of dy shows that dy is a "form" attached to the manifold E2 and has degree 1.
To create a rank 2 fiber bundle F over a 3 dimensional base manifold with base coordinates [x, y, z] and fiber coordinates [u, v], use the DGsetup command as follows:
DGsetup([x, y, z], [u, v], F, verbose);
x,y,z,u,v
D_x,D_y,D_z,D_u,D_v
dx,dy,dz,du,dv
frame name: F
Note that the Maple prompt has changed to F. Within the DifferentialGeometry environment, the Maple prompt changes to the name of the current or active coordinate system. The name of the prompt always reflects the name of the coordinate system or manifold of the last computed object.
For example, as we shall see in Lesson 6, if F : M -> N is a transformation from a manifold M to a manifold N and a differential form alpha is defined on N, then the prompt is
N >
If the command beta := Pullback(F, alpha) is executed, then the result, beta, is a differential form on M and the prompt changes to
M >
To create the second-order jet space J^2(R^2, R) with independent variables [x, y] and dependent variable [u], use the DGsetup command with the following syntax:
DGsetup([x, y], [u], J2, 2, verbose);
x,y,u[],u1,u2,u1,1,u1,2,u2,2
D_x,D_y,D_u[],D_u1,D_u2,D_u1,1,D_u1,2,D_u2,2
dx,dy,du[],du1,du2,du1,1,du1,2,du2,2
The following type [1,0] biforms have been defined and protected::
Dx,Dy
The following type [0,1] biforms (contact 1-forms) have been defined and protected::
Cu[],Cu1,Cu2,Cu1,1,Cu1,2,Cu2,2
frame name: J2
In this context, the dependent variable u is now referred to as u[ ], the derivative of u with respect to x is u[1], the derivative of u with respect to y is u[2], the second derivative of u with respect to x is u[1,1] and so on.
To suppress the display of the protected variables, vector fields, and differential 1-forms, run DGsetup with the quiet option.
DGsetup([x, y, z], E3, quiet);
frame name: E3
This option, together with options for controlling the format of the Maple prompt, can be set using the Preferences command.
The DGinfo command is located in the Tools package of DifferentialGeometry. This utility program can be used to retrieve information about any object created by the DifferentialGeometry package. Here are a few examples.
List all the coordinate systems defined in the current Maple session.
Tools:-DGinfo("FrameNames");
E2,E3,F,J2
Obtain the name of the active frame/coordinate system.
Tools:-DGinfo("CurrentFrame");
E3
Obtain the dimensions of the base manifold and of the fiber space of the fiber bundle.
Tools:-DGinfo(F, "FrameBaseDimension");
3
Tools:-DGinfo(F, "FrameFiberDimension");
2
Obtain the coordinate basis for the tangent space of the manifold E3.
Tools:-DGinfo(E3, "FrameBaseVectors");
D_x,D_y,D_z
The command ChangeFrame is used to change the active frame.
ChangeFrame(J2);
J2
The command RemoveFrame removes a frame from Maple memory (the number of remaining frames is returned) and unassigns and unprotects the names associated to that frame.
RemoveFrame(F);
E2,E3,J2
Prior to displaying the result of a computation, most DifferentialGeometry commands simplify the result using the Maple simplify command. The user may control this simplification using the Preferences command.
a := (x^2)^(1/2);
a ≔ x2
simplify(a);
csgn⁡x⁢x
Let us multiply the vector field D_x by the scalar a. We see that the result has been simplified using the Maple command simplify.
a &mult D_x;
csgn⁡x⁢x⁢D_x
Let us define a new simplify procedure, NewSimplify, and use the Preferences command to dictate that NewSimplify is to be used to simplify the output of all DifferentialGeometry commands.
NewSimplify := proc(x) simplify(x, symbolic) end:
Preferences("simplification", NewSimplify);
procs...end proc
Let us multiply the vector field D_x by the scalar a again. We see that the result has been simplified using the user defined command NewSimplify.
x⁢D_x
Here is another example.
b := sin(2*x);
b ≔ sin⁡2⁢x
b &mult D_x;
sin⁡2⁢x⁢D_x
NewSimplify2 := proc(x) expand(x) end:
Preferences("simplification", NewSimplify2);
procxsimplify⁡x,symbolicend proc
2⁢sin⁡x⁢cos⁡x⁢D_x
The user can similarly control how DifferentialGeometry invokes dsolve, pdsolve and a number of LinearAlgebra procedures. Before continuing, we reset the simplification to its default procedure.
Preferences("simplification",simplify):
Exercise 1
Create a coordinate system called M4 with coordinates x, y, z, t.
Solution
DGsetup([x, y, z, t], M4);
frame name: M4
Exercise 2
Create a coordinate system that you would need to study first order variational problems for curves in the plane.
There are two possibilities here depending on whether the curve is to be described as a graph of a function y = f(x) or parametrically as [x(t), y(t)].
DGsetup([x], [y], E2, 1, verbose);
x,y[],y1
D_x,D_y[],D_y1
dx,dy[],dy1
Dx
Cy[],Cy1
DGsetup([t], [x, y], P, 1, verbose);
t,x[],y[],x1,y1
D_t,D_x[],D_y[],D_x1,D_y1
dt,dx[],dy[],dx1,dy1
Dt
Cx[],Cy[],Cx1,Cy1
frame name: P
Exercise 3
Create a coordinate system that you would need in order to calculate the point symmetries of the heat equation u_t = u_xx.
DGsetup([t, x], [u], Heat, 2, verbose);
t,x,u[],u1,u2,u1,1,u1,2,u2,2
D_t,D_x,D_u[],D_u1,D_u2,D_u1,1,D_u1,2,D_u2,2
dt,dx,du[],du1,du2,du1,1,du1,2,du2,2
Dt,Dx
frame name: Heat
Exercise 4
Use DGinfo to obtain the coordinate basis for the cotangent bundle for the manifold M4 defined in Exercise 1.
Tools:-DGinfo(M4, "FrameBaseForms");
dx,dy,dz,dt
Exercise 5
Write a program, test, which will return true if the input is the name of a defined coordinate system and false otherwise.
Hint: ?member
test := proc(N)
local Frame;
Frame := Tools:-DGinfo("FrameNames");
member(N, Frame);
end:
test(M4);
true
test(M5);
false
Exercise 6
Change the DifferentialGeometry simplification procedure so that no simplification whatsoever occurs prior to output. Use the following calculation as a check.
((1/x) &mult D_x) &plus ((1/x^2) &mult D_x);
1+x⁢D_xx2
NoSimplify := x ->x ;
NoSimplify ≔ x→x
Preferences("simplification", NoSimplify);
1x2+1x⁢D_x
Download Help Document