DifferentialGeometry Lessons
Lesson 5: The Exterior Derivative and the Homotopy Operator for the de Rham complex.
|
Overview
|
|
In this lesson, you will learn to do the following:
–
|
Calculate the exterior derivative of a differential p-form or a matrix of p-forms.
|
–
|
Check that a Pfaffian system of 1-forms is integrable.
|
–
|
Calculate the Maurer Cartan forms for a matrix group.
|
–
|
Apply the homotopy operator for the exterior derivative.
|
|
|
ExteriorDerivative
|
|
The defining properties and identities of the exterior derivative are described in detail in the ExteriorDerivative help page and also in Exercise 4.
>
|
with(DifferentialGeometry):
|
>
|
DGsetup([x, y, z, w], E3);
|
| (2.1) |
E3 >
|
PDEtools[declare](M(vars), N(vars), P(vars), Q(vars), quiet);
|
Example 1. The exterior derivative of a function.
| (2.2) |
E3 >
|
ExteriorDerivative(f);
|
| (2.3) |
Example 2. The exterior derivative of a 1-form.
E3 >
|
alpha1 := evalDG(M(vars)*dx + N(vars)*dy + P(vars)*dz + Q(vars)*dw);
|
| (2.4) |
E3 >
|
ExteriorDerivative(alpha1);
|
| (2.5) |
Example 3. The exterior derivative of a 2-form.
E3 >
|
alpha2 := evalDG(M(vars)*dx &w dy + N(vars)*dz &w dw);
|
| (2.6) |
E3 >
|
ExteriorDerivative(alpha2);
|
| (2.7) |
Example 4. The exterior derivative of a 3-form.
alpha3 := evalDG(M(vars)*dy &w dz &w dw - N(vars)*dx &w dz &w dw + P(vars)*dx &w dy &w dw - Q(vars)*dx &w dy &w dz);
E3 >
|
ExteriorDerivative(alpha3);
|
| (2.8) |
Example 5. The ExteriorDerivative command may be applied directly to a Matrix of functions or differential forms.
E3 >
|
A := Matrix([[x, y], [z, w]]):
|
E3 >
|
Omega := ExteriorDerivative(A);
|
| (2.9) |
|
|
The formula of Cartan
|
|
E3 >
|
with(DifferentialGeometry):
|
One of the most important formulas in differential geometry is the Cartan formula relating the Lie derivative of a differential form to its exterior derivative:
LieDerivative(X, omega) = Hook(X, ExteriorDerivative(omega)) + ExteriorDerivative(Hook(X, omega))
Here we write a little program to check this identity.
E3 >
|
LieDerivativeCartan := proc(X, omega)
|
E3 >
|
local a, b1, b2, b, c, d;
|
E3 >
|
a := LieDerivative(X, omega);
|
E3 >
|
b1 := Hook(X, ExteriorDerivative(omega));
|
E3 >
|
b2 := ExteriorDerivative(Hook(X,omega));
|
E3 >
|
d := Tools:-DGinfo(c, "CoefficientSet");
|
Check the Cartan formula using the vector X and the differential forms alpha and beta.
E3 >
|
DGsetup([x, y, z, w], M):
|
M >
|
X := evalDG(x^2*D_x - x*z*D_y + w*z*D_w);
|
| (3.1) |
M >
|
alpha := evalDG(z &mult dx &w dy);
|
| (3.2) |
M >
|
beta := evalDG(y^2 *dy &w dz &w dw);
|
| (3.3) |
M >
|
LieDerivativeCartan(X, alpha);
|
| (3.4) |
M >
|
LieDerivativeCartan(X, beta);
|
| (3.5) |
|
|
Application 1: Integrable Pfaffian systems
|
|
A rank r Pfaffian system P is defined by a collection of r (independent) 1-forms. The Pfaffian system is said to integrable if the exterior derivative of each form in P vanishes modulo the ideal of differential forms generated by P.
We check that a Pfaffian system is integrable by wedging the exterior derivative of each form in P against all the (independent) forms in P and checking that the result vanishes.
The invariants of a Pfaffian system P are functions whose exterior derivatives lie in P. The Frobenius Theorem states that a rank r Pfaffian system always admits r functionally independent invariants.
The annihilating space of a rank r Pfaffian system P is a rank (n - r) distribution V (See Lesson 4). A Pfaffian system P is integrable if and only if the annihilating distribution V is integrable.
M >
|
with(DifferentialGeometry):
|
M >
|
DGsetup([x, y, u, v], E4):
|
Here is a rank 2 Pfaffian system.
E4 >
|
P := evalDG([(-y^2 + x^2)*dy + (-y*u - x*v)*du + (-y*v - x*u)*dv, (x*v + y*u)*dx + (y*v + x*u)*dy + (v^2 - u^2)*dv]);
|
| (4.1) |
We check that P is integrable:
E4 >
|
ExteriorDerivative(P[1]) &wedge P[1] &wedge P[2];
|
| (4.2) |
E4 >
|
ExteriorDerivative(P[2]) &wedge P[1] &wedge P[2];
|
| (4.3) |
We check that the invariants for this system are f1 and f2 using GetComponents to prove that the exterior derivative of f1 and f2 are linear combinations of the 1-forms in P.
| (4.4) |
E4 >
|
f2 := 1/2*(x^2 + y^2 + u^2 + v^2);
|
| (4.5) |
E4 >
|
GetComponents(ExteriorDerivative(f1), P);
|
| (4.6) |
E4 >
|
GetComponents(ExteriorDerivative(f2), P);
|
| (4.7) |
|
|
Application 2: Maurer Cartan forms for matrix groups
|
|
An r-parameter matrix group is defined by an n x n matrix A(x1, x2, ... xr), depending smoothly on parameters x1, x2, ...xr, if the set of matrices so generated is a group in the usual context:
–
|
For each admissible parameter value x = (x1, x2, ... xr) and y = (y1, y2, ... yr), there is a parameter value z = (z1, z2, ... zr) such that A(x)A(y) = A(z).
|
–
|
For some value x0, A(x0) = I, the n x n identity matrix.
|
–
|
For each admissible parameter value x, there is a parameter value y such that A(y) = [A(x)]^(-1).
|
For any Lie group there always exists a coframe of left (or right) invariant 1-forms. These are called the Maurer-Cartan forms for the Lie group. For a matrix group defined by A(x1, x2, ...), the left invariant Maurer-Cartan forms can be computed from the formula OmegaL = A^(-1) dA and the right invariant Maurer-Cartan forms can be computed from OmegaR = dA A^(-1). The Maurer-Cartan forms, Omega, for a matrix algebra always satisfy the structure equation d(Omega) - Omega^Omega = 0.
The vector fields dual to the forms, OmegaR, are right invariant and in fact are the infinitesmal generators for left multiplication on G. The Lie derivative of the left invariant Maurer-Cartan forms with respect to the the right invariant vector fields vanish.
In this section, we simply illustrate these facts with a simple example.
E4 >
|
with(DifferentialGeometry):
|
E4 >
|
DGsetup([x1, x2, x3], G);
|
| (5.1) |
Consider the following set of matrices:
G >
|
A := Matrix([[exp(-x1), -x1*exp(-x1), x2], [0, exp(-x1), x3], [0, 0, 1]]);
|
| (5.2) |
Let us first check that the matrix A does indeed define a 3-parameter matrix group. First note that [x1 = 0, x2 = 0, x3 = 0] gives the identity matrix. We next check closure under multiplication. To do this, we define Matrices B(y) and C(z).
G >
|
B := eval(A, [x1 = y1, x2 = y2, x3 = y3]); C := eval(A, [x1 = z1, x2 = z2, x3 = z3]);
|
| (5.3) |
Now find the scalar equations from the matrix equation A(x)B(y) = C(z).
G >
|
eq1 := convert(A.B - C ,set);
|
| (5.4) |
Solve these equations for the parameters {z1, z2, z3}. The fact that the solution exists proves that the set of matrices A is closed under mulitplication. The solution gives the multiplication rule for this 3-dimensional matrix group.
G >
|
MultiplicationRule := solve(eq1, {z1, z2, z3});
|
| (5.5) |
Likewise to check closure under inversion, we find the scalar equations for the matrix equations A(x)^(-1) = B(y) and solve for y. The fact that the solution exists proves that the set of matrices A is closed under inversion.
G >
|
eq2 := convert(A^(-1)-B, set);
|
| (5.6) |
G >
|
InverseFormula := solve(eq2, {y1,y2,y3});
|
| (5.7) |
To multiply matrices of differential forms we use the MatrixMultiply command from the Tools package.
G >
|
dA := ExteriorDerivative(A);
|
| (5.8) |
G >
|
OmegaL0 := (A^(-1)) &MatrixMult dA;
|
| (5.9) |
G >
|
OmegaR0 := dA &MatrixMult (A^(-1));
|
| (5.10) |
Verify the structure equation d(Omega) - Omega^Omega = 0 for the Maurer-Cartan forms in Matrix form.
G >
|
ExteriorDerivative(OmegaL0) &MatrixPlus (OmegaL0 &MatrixWedge OmegaL0);
|
| (5.11) |
G >
|
ExteriorDerivative(OmegaR0) &MatrixMinus (OmegaR0 &MatrixWedge OmegaR0);
|
| (5.12) |
Define a basis for the left invariant 1-forms. (We take 3 independent 1-forms from the entries of OmegaL0.)
Define a basis for the right invariant 1-forms. (We take 3 independent 1-forms from the entries of OmegaR0.)
G >
|
OmegaL := [(-1) &mult OmegaL0[1, 1], OmegaL0[1, 3], OmegaL0[2, 3]];
|
| (5.13) |
G >
|
OmegaR := [(-1) &mult OmegaR0[1, 1], OmegaR0[1, 3], OmegaR0[2, 3]];
|
| (5.14) |
Calculate the left invariant vector fields for the group as the dual vectors to the left invariant 1-forms.
G >
|
XL := DualBasis(OmegaL);
|
| (5.15) |
Calculate the right invariant vector fields for the group as the dual vectors to the right invariant 1-forms.
G >
|
XR := DualBasis(OmegaR);
|
| (5.16) |
The left invariant 1-forms are always invariant with respect to the right invariant vector fields. Let's check this.
G >
|
Matrix(3, 3, (i, j) -> LieDerivative(XR[i], OmegaL[j]));
|
| (5.17) |
The right invariant 1-forms are always invariant with respect to the left invariant vector fields.
G >
|
Matrix(3, 3, (i, j) -> LieDerivative(XL[i], OmegaR[j]));
|
| (5.18) |
The left invariant 1-vector fields always commute with the right invariant vector fields.
G >
|
Matrix(3, 3, (i, j) -> LieBracket(XL[i], XR[j]));
|
| (5.19) |
|
|
The Homotopy Operator for the de Rham complex
|
|
A differential p-form omega with vanishing exterior derivative, d(omega) = 0, is said to be a closed p-form. A differential p-form omega which is the exterior derivative of some (p - 1) form eta, omega = d(eta), is said to be an exact p-form. Since d^2 = 0, any exact p-form is closed.
For differential forms which are defined on a contractible region of R^n, the converse is true -- every closed p-form is exact.
The standard proof of this fact, at least for regions in R^n which are star-shaped with respect to a fixed point, relies on the explicit construction of a homotopy operator, that is, a mapping H from p-forms to (p - 1) forms for which the identity
omega = H(d(omega)) + d(H(omega))
holds for all p forms. From this identity, it is clear that if omega is closed, then omega is exact. There are many possible formulas for H(omega) but the simplest homotopy operator, and the one given in most textbooks, depends upon an integration of the coefficients of the differential form omega from the origin 0 to the general point x along the line tx -- where t is the integration parameter. This is the homotopy operator which is invoked by the command DeRhamHomotopy in its simplest form.
For further details, we refer to the texts Boothby, page 274, Flanders, page27, Lovelock and Rund, page 141.
G >
|
with(DifferentialGeometry):
|
G >
|
DGsetup([x, y, z, w], E4):
|
Example 1. Define a 2-form omega1.
E4 >
|
omega1 := evalDG(y*dx &w dz &w dw + x*dy &w dz &w dw);
|
| (6.1) |
The form omega1 is closed.
E4 >
|
ExteriorDerivative(omega1);
|
| (6.2) |
To find a 1-form eta1 whose exterior derivative is omega1, apply the de Rham homotopy operator to omega1.
E4 >
|
eta1 := DeRhamHomotopy(omega1);
|
| (6.3) |
Check that omega1 is the exterior derivative of eta1.
E4 >
|
check := ExteriorDerivative(eta1) &minus omega1;
|
| (6.4) |
The optional arguments for the DeRhamHomotopy command give the user some control over the path of integration used in defining the homotopy operator.
–
|
The option initialpoint = x0 changes the default integration path tx (a straight line from the origin to x) to tx + (1 - t)x0 (a straight line from the point x0 to x). This option is useful when the differential form is singular at the origin.
|
–
|
The option integrationlimits = [1, infinity] changes the integration path to tx, t = 1 .. infinity. This option can be very useful when the coefficients of the differential form -> 0 as x-> infinity (more precisely, if F is any coefficient of the differential form, then it is necessary that tF(tx) ~ t^-(1 + epsilon) as t -> infinity for the integral in the homotopy formula to converge).
|
–
|
The option path = "zigzag" changes the integration path to a sequence of coordinates lines. For example, if the coordinates are [x, y, z], the integration path is the sequence of 3 straight lines from [0, 0, 0] to [x, 0, 0], from [x, 0, 0] to [x, y, 0], and [x, y, 0] to [x, y, z]. The order in which these coordinates lines are chosen may be customized with the variableorder = [var1, var2, ... ] option. The use of the path = "zigzag" option often results in a simpler output from the DeRhamHomotopy procedure.
|
Here are a few simple examples which illustrate the use of these options.
Example 2. Define a 2-form omega2 and use the DeRhamHomotopy command with various options to find different forms eta2a, eta2b, ... all of whose exterior derivatives are omega2.
E4 >
|
omega2 := evalDG(x*dx &w dy);
|
| (6.5) |
E4 >
|
eta2a := DeRhamHomotopy(omega2);
|
| (6.6) |
E4 >
|
eta2b := DeRhamHomotopy(omega2, initialpoint = [x = 1, y = 2]);
|
| (6.7) |
E4 >
|
eta2c := DeRhamHomotopy(omega2, path = "zigzag");
|
| (6.8) |
E4 >
|
eta2d := DeRhamHomotopy(omega2, path = "zigzag", variableorder = [y, x, w, z]);
|
| (6.9) |
E4 >
|
eta2e := DeRhamHomotopy(omega2, path = "zigzag", variableorder = [y, x, w, z], initialpoint = [x = 1, y = 2]);
|
| (6.10) |
The exterior derivative of each the forms eta2a ... eta2e returns the correct result, namely, omega2.
E4 >
|
ExteriorDerivative([eta2a, eta2b, eta2c, eta2d, eta2e]);
|
| (6.11) |
Example 3. Here are a few examples which illustrate the use of DeRhamHomotopy for forms with singularities.
E4 >
|
omega3 := evalDG(1/x^3 *dx &w dy);
|
| (6.12) |
E4 >
|
eta3 := DeRhamHomotopy(omega3, integrationlimits = [1, infinity]);
|
| (6.13) |
E4 >
|
omega4 := evalDG(1/x *dx &w dy);
|
| (6.14) |
E4 >
|
eta4a := DeRhamHomotopy(omega4, path = "zigzag");
|
| (6.15) |
E4 >
|
eta4b := DeRhamHomotopy(omega4, path = "zigzag", initialpoint = [x = 1], variableorder = [y, x, w, z]);
|
| (6.16) |
|
|
Exercises
|
|
|
Exercise 1
|
|
Calculate the exterior derivatives of the forms alpha1 ... alpha5. If the form is closed, find a form of which it is the exterior derivative.
E4 >
|
with(DifferentialGeometry):
|
E4 >
|
DGsetup([x, y, z, w], M):
|
M >
|
alpha1 := evalDG(y^3 *dx + w^3 *dy);
|
| (7.1.1) |
M >
|
alpha2 := evalDG(exp(y)*dx &w dy &w dz + exp(x)*z*dx &w dz &w dw);
|
| (7.1.2) |
M >
|
alpha3 := evalDG(-y*w/(x*z + 1)^2*z*dx + w/(x*z + 1)*dy - y*w/(x*z + 1)^2*x*dz + y/(x*z + 1)*dw);
|
| (7.1.3) |
M >
|
alpha4 := evalDG((z*w^2 + z*x^2 + w*x^2 + w*z^2)/(x^2 + z^2)/(w^2 + x^2)*dx &w dz + x/(w^2 + x^2)*dz &w dw);
|
| (7.1.4) |
M >
|
alpha5 := evalDG(x^2/y*dx &w dy &w dz - y/z^2*dy &w dz &w dw);
|
| (7.1.5) |
|
Solution
|
|
Part [i] The form alpha1 is not closed.
M >
|
ExteriorDerivative(alpha1);
|
| (7.1.1.1) |
Part [ii] The form alpha2 is closed. We give two different forms beta2a and beta2b whose exterior derivative is alpha2.
M >
|
ExteriorDerivative(alpha2);
|
| (7.1.1.2) |
M >
|
beta2a := DeRhamHomotopy(alpha2);
|
| (7.1.1.3) |
M >
|
beta2b := DeRhamHomotopy(alpha2, path = "zigzag");
|
| (7.1.1.4) |
M >
|
ExteriorDerivative(beta2a) &minus alpha2;
|
| (7.1.1.5) |
M >
|
ExteriorDerivative(beta2b) &minus alpha2;
|
| (7.1.1.6) |
Part [iii] The form alpha3 is closed.
M >
|
ExteriorDerivative(alpha3);
|
| (7.1.1.7) |
M >
|
beta3 := DeRhamHomotopy(alpha3, path = "zigzag");
|
| (7.1.1.8) |
M >
|
ExteriorDerivative(beta3) &minus alpha3;
|
| (7.1.1.9) |
Part [iv] The form alpha4 is closed. Because the form is not defined at the origin, the standard homotopy formula will not work.
M >
|
ExteriorDerivative(alpha4);
|
| (7.1.1.10) |
M >
|
beta4 := DeRhamHomotopy(alpha4, path = "zigzag");
|
| (7.1.1.11) |
M >
|
ExteriorDerivative(beta4) &minus alpha4;
|
| (7.1.1.12) |
Part [iv] The form alpha5 is closed. Because the form is not defined at the origin, the standard homotopy formula will not work.
M >
|
ExteriorDerivative(alpha5);
|
| (7.1.1.13) |
M >
|
beta5a := DeRhamHomotopy(alpha5, initialpoint =[y = 1, z = 1], path = "zigzag");
|
| (7.1.1.14) |
M >
|
beta5b := DeRhamHomotopy(alpha5, initialpoint = [y = 1, z = 1], path = "zigzag", variableorder = [y, z, x, w]);
|
| (7.1.1.15) |
M >
|
ExteriorDerivative(beta5a) &minus alpha5;
|
| (7.1.1.16) |
M >
|
ExteriorDerivative(beta5b) &minus alpha5;
|
| (7.1.1.17) |
|
|
|
Exercise 2
|
|
Find all functions k(x, y, u, v) such that the form alpha is closed.
M >
|
with(DifferentialGeometry):
|
M >
|
DGsetup([x, y, z, w], E3);
|
| (7.2.1) |
E3 >
|
alpha := evalDG(k(x, y, z, w)*dx &w dy - x*y^2*dy &w dz + z*w* dz &w dw);
|
| (7.2.2) |
|
Solution
|
|
Compute the exterior derivative of alpha and set the coefficients to 0 to get the pde for the function f which must be satisfied for d(alpha) = 0.
E3 >
|
beta := ExteriorDerivative(alpha);
|
| (7.2.1.1) |
E3 >
|
Eq := Tools:-DGinfo(beta, "CoefficientSet");
|
| (7.2.1.2) |
E3 >
|
soln := pdsolve(Eq, k(x, y, z, w));
|
| (7.2.1.3) |
E3 >
|
Answer := eval(alpha, soln);
|
| (7.2.1.4) |
|
|
|
Exercise 3
|
|
Use the de Rham homotopy operator to find a vector whose divergence is the function f.
E3 >
|
with(DifferentialGeometry):
|
E3 >
|
DGsetup([x, y, u, v], E4):
|
E4 >
|
f := x^2*y^2*u^2*v^2 - 2*x*y*u*v;
|
| (7.3.1) |
|
Solution
|
|
E4 >
|
omega := f &mult Tools:-DGvolume("form");
|
| (7.3.1.1) |
E4 >
|
eta1 := DeRhamHomotopy(omega);
|
| (7.3.1.2) |
E4 >
|
C := Tools:-DGinfo(eta1, "CoefficientList", "all");
|
| (7.3.1.3) |
From the coefficients of eta1, we define the vector X -- see the formula given above for the exterior derivative of a 3 form.
E4 >
|
X := DGzip(C, evalDG([-D_v, D_u, -D_y, D_x]), "plus");
|
| (7.3.1.4) |
E4 >
|
Tools:-Divergence(X);
|
| (7.3.1.5) |
|
|
|
Exercise 4
|
|
The exterior derivative is usually defined in terms of the the Lie bracket as follows:
[i] If omega is a 1-form and X and Y vector fields, then
(d omega)(X, Y) = X(omega(Y)) - Y(omega(X) - omega([X, Y])
[ii] If omega is a 2-form and X, Y, and Z are vector fields, then
(d omega)(X, Y, Z) = X(omega(Y, Z)) - Y(omega(X, Z)) + Z(omega(X, Y)) - omega([X, Y], Z) + omega([Z, X], Y) - omega([Y, Z], X)
In addition to the Cartan formula, the exterior derivative satisfies the following identities. Check these identities by means of examples. As in previous exercises, the best way to do this is to write simple programs.
[iii] d(alpha &w beta) = d(alpha) &w beta +/- alpha &w d(beta), where the - sign is used when the degree of alpha is odd.
[iv] d(d(omega) = 0.
[v] H(d (omega)) + d (H(omega)) = omega.
Here is some test data you can use to check your programs.
E4 >
|
DGsetup([x, y, z, w], M):
|
M >
|
alpha1 := evalDG(z*x*dx + y^2*dw);
|
| (7.4.1) |
M >
|
alpha2 := evalDG(x*w*dy + 3*y^2*z*dw);
|
| (7.4.2) |
M >
|
alpha3 := evalDG(x^2*dy &w dz - x*y*dx &w dw);
|
| (7.4.3) |
M >
|
alpha4 := evalDG(exp(y)*dx &w dz - exp(x)*dz &w dw);
|
| (7.4.4) |
M >
|
alpha5 := evalDG((z^3 + x^3)*dx &w dy &w dz - (x*y*w)*dy &w dz &w dw);
|
| (7.4.5) |
M >
|
X1 := evalDG(x*D_x + 2*y*D_y + 3*z*D_z + 4*w*D_w);
|
| (7.4.6) |
M >
|
X2 := evalDG(y*D_x - x*D_y);
|
| (7.4.7) |
M >
|
X3 := evalDG(x*D_y + y*D_z + z*D_w);
|
| (7.4.8) |
|
Solution
|
|
Part [i]
E3 >
|
ExteriorDerivativeDefinition1 := proc(omega, X, Y)
|
E3 >
|
local a, a1, b, b1, b2, b3;
|
E3 >
|
a1 := ExteriorDerivative(omega):
|
E3 >
|
a := Hook([X, Y], a1);
|
E3 >
|
b1 := LieDerivative(X, Hook(Y, omega));
|
E3 >
|
b2 := LieDerivative(Y, Hook(X, omega));
|
E3 >
|
b3 := Hook(LieBracket(X, Y), omega);
|
E3 >
|
b := evalDG(b1 - b2 - b3);
|
Test ExteriorDerivativeDefinition1.
M >
|
ExteriorDerivativeDefinition1(alpha1, X1, X2);
|
| (7.4.1.1) |
M >
|
ExteriorDerivativeDefinition1(alpha1, X2, X3);
|
| (7.4.1.2) |
Part [ii]
E3 >
|
ExteriorDerivativeDefinition2 := proc(omega, X, Y, Z)
|
E3 >
|
local a, a1, b1, b2, b3, b4, b5, b6, b;
|
E3 >
|
a1 := ExteriorDerivative(omega):
|
E3 >
|
a := Hook([X, Y, Z], a1);
|
E3 >
|
b1 := LieDerivative(X, Hook([Y, Z], omega));
|
E3 >
|
b2 := LieDerivative(Y, Hook([X, Z], omega));
|
E3 >
|
b3 := LieDerivative(Z, Hook([X, Y], omega));
|
E3 >
|
b4 := Hook([LieBracket(X, Y), Z], omega);
|
E3 >
|
b5 := Hook([LieBracket(X, Z), Y], omega);
|
E3 >
|
b6 := Hook([LieBracket(Y, Z), X], omega);
|
E3 >
|
b := evalDG(b1 - b2 + b3 - b4 + b5 - b6);
|
E3 >
|
simplify(evalDG(a - b));
|
Test ExteriorDerivativeDefinition2.
M >
|
ExteriorDerivativeDefinition2(alpha3, X1, X2, X3);
|
| (7.4.1.3) |
M >
|
ExteriorDerivativeDefinition2(alpha4, X1, X2, X3);
|
| (7.4.1.4) |
Part [iii]
E3 >
|
ExteriorDerivativeAntiDerivation := proc(alpha, beta)
|
E3 >
|
local a1, a, b, b1, b2, p;
|
E3 >
|
a1 := alpha &wedge beta;
|
E3 >
|
a := ExteriorDerivative(a1);
|
M >
|
b1 := ExteriorDerivative(alpha) &wedge beta;
|
M >
|
p := Tools:-DGinfo(alpha, "FormDegree");
|
M >
|
b2 := ((-1)^p) &mult (alpha &wedge ExteriorDerivative(beta));
|
Test ExteriorDerivativeAntiDerivation.
M >
|
ExteriorDerivativeAntiDerivation(alpha1, alpha2);
|
M >
|
ExteriorDerivativeAntiDerivation(alpha1, alpha3);
|
| (7.4.1.5) |
Part [iv]
E3 >
|
ExteriorDerivativeSquared := proc(omega)
|
E3 >
|
a1 := ExteriorDerivative(omega);
|
E3 >
|
a := ExteriorDerivative(a1);
|
Test ExteriorDerivativeSquared.
M >
|
ExteriorDerivativeSquared(alpha1);
|
| (7.4.1.6) |
M >
|
ExteriorDerivativeSquared(alpha3);
|
| (7.4.1.7) |
Part [v]
M >
|
DeRhamHomotopyIdentity := proc()
|
M >
|
local a, b, b1, b2, c;
|
M >
|
b1 := ExteriorDerivative(DeRhamHomotopy(args));
|
M >
|
b2 := DeRhamHomotopy(ExteriorDerivative(args[1]), args[2 .. -1]);
|
Test DeRhamHomotopyIdentity.
M >
|
DeRhamHomotopyIdentity(alpha1);
|
| (7.4.1.8) |
M >
|
DeRhamHomotopyIdentity(alpha2);
|
| (7.4.1.9) |
M >
|
DeRhamHomotopyIdentity(alpha3, path = "zigzag");
|
| (7.4.1.10) |
M >
|
DeRhamHomotopyIdentity(alpha5, initialpoint = [x = 1, y = 2, z = 3, w = 4]);
|
| (7.4.1.11) |
|
|
|
Exercise 5
|
|
The following Pfaffian systems appear as exercises in Goursat's classic text Lecons sur lese equations aux derivees partielles, page 138. Check that each is integrable.
M >
|
with(DifferentialGeometry):
|
M >
|
DGsetup([x1, x2, x3], M1):
|
M1 >
|
DGsetup([x1, x2, x3, x4], M2):
|
M2 >
|
DGsetup([x1, x2, x3, x4, x5], M3):
|
M3 >
|
DGsetup([x, y, u, v], M4):
|
M4 >
|
DGsetup([x, y, z, u, v, w], M5):
|
M5 >
|
DGsetup([x1, x2, x3, u1, u2, u3], M6):
|
M6 >
|
DGsetup([x1, x2, x3, z1, z2, z3], M7):
|
M7 >
|
DGsetup([x, y, z, t], M8):
|
Exercise 1[i]
M1 >
|
Omega1i := evalDG([x1*(x2 - 1)*(x3 - 1)*dx1 + x2*(x3 - 1)*(x1 - 1)*dx2 + x3*(x1 - 1)*(x2 - 1)*dx3]);
|
| (7.5.1) |
Exercise 1[ii]
M1 >
|
Omega1ii := evalDG([dx1 + (x1/x2)*dx2 - x1/(2*x3)*dx3]);
|
| (7.5.2) |
Exercise 1[iii]
M2 >
|
Omega1iii := evalDG([dx1 + x1/(2*x2)*dx2 - (x3*x4)/(x1*x2)*dx3 - x3^2/(2*x1*x2)*dx4]);
|
| (7.5.3) |
Exercise 1[iv]
M3 >
|
Omega1iv := evalDG([dx1 + (x1/(x2*log(x2*x3)))*dx2 + (x1/(x3*log(x2*x3)))*dx3 + (x1/x5*arctan(x4/x5))*dx4 - (x1*x4/x5^2*arctan(x4/x5))*dx5]);
|
| (7.5.4) |
Exercise 2[i]
M4 >
|
Omega2i := evalDG([(v*y - u*x)*du - ((u^2 + y^2)*dx + (u*v + x*y)*dy),(u*x - v*y)*dv - ((u*v + x*y)*dx + (v^2 + x^2)*dy)]);
|
| (7.5.5) |
Exercise 2[ii]
M5 >
|
omega1 := evalDG((u - v)*(u - w)/((u*x - 1)*(u*y - 1)*(u*z - 1))*du - (1/(u*x - 1)*dx + 1/(u*y - 1)*dy + 1/(u*z - 1)*dz)):
|
M5 >
|
omega2 := evalDG((v - u)*(v - w)/((v*x - 1)*(v*y - 1)*(v*z - 1))*dv - (1/(v*x - 1)*dx + 1/(v*y - 1)*dy + 1/(v*z - 1)*dz)):
|
M5 >
|
omega3 := evalDG((w - u)*(w - v)/((w*x - 1)*(w*y - 1)*(w*z - 1))*dw - (1/(w*x - 1)*dx + 1/(w*y - 1)*dy + 1/(w*z - 1)*dz)):
|
M5 >
|
Omega2ii := [omega1, omega2, omega3];
|
| (7.5.6) |
Exercise 2[iii]
M6 >
|
omega1 := evalDG(du1 - (u1*(-2*x1 + x2 + a)/((x1 - x2)*(x1 - a))*dx1 + u2*(a - x2)/((x1 - x2)*(x1 - a))*dx2)):
|
M6 >
|
omega2 := evalDG(du2 - (u1*(a - x1)/((x2 - x1)*(x2 - a))*dx1 + u2*(-2*x2 + x1 + a)/((x2 - x1)*(x2 - a))*dx2)):
|
M6 >
|
omega3 := evalDG(du3 - (u1*(x2 - x1)/((a - x1)*(a - x2))*dx1 + u2*(x1 - x2)/((a - x1)*(a - x2))*dx2)):
|
M6 >
|
Omega2iii := [omega1, omega2, omega3];
|
| (7.5.7) |
Exercise 2[iv]
M7 >
|
omega1 := evalDG((x1 - x2)*(x1 - x3)*dz1 - (z1*(-2*x1 + x2 + x3)*dx1 + z2*(x3 - x2)*dx2 + z3*(x2 - x3)*dx3)):
|
M7 >
|
omega2 := evalDG((x2 - x1)*(x2 - x3)*dz2 - (z1*(x3 - x1)*dx1 + z2*(-2*x2 + x1 + x3)*dx2 + z3*(x1 - x3)*dx3)):
|
M7 >
|
omega3 := evalDG((x3 - x1)*(x3 - x2)*dz3 - (z1*(x2 - x1)*dx1 + z2*(x1 - x2)*dx2 + z3*(-2*x3 + x1 + x2)*dx3)):
|
M7 >
|
Omega2iv := [omega1, omega2, omega3];
|
| (7.5.8) |
Exercise 2[v]
| (7.5.9) |
M5 >
|
omega1 := evalDG(du - (u*dx + v*dy + w*dz)):
|
M5 >
|
omega2 := evalDG(dv - (v*dx + w*dy + u*dz)):
|
M5 >
|
omega3 := evalDG(dw - (w*dx + u*dy + v*dz)):
|
M5 >
|
Omega2v := [omega1, omega2, omega3];
|
| (7.5.10) |
Exercise 2[vi]
| (7.5.11) |
M5 >
|
omega1 := evalDG(du - ((u + x)*dx + (v + y + 1)*dy + (w + z + 1)*dz)):
|
M5 >
|
omega2 := evalDG(dv - ((v + y + 1)*dx + (w + z)*dy + (u + x + 1)*dz)):
|
M5 >
|
omega3 := evalDG(dw - ((w + z + 1)*dx + (u + x + 1)*dy + (v + y)*dz)):
|
M5 >
|
Omega2vi := [omega1, omega2, omega3];
|
| (7.5.12) |
Find exact linear combinations of the Pfaffian systems.
Exercise 3[i]
M8 >
|
Omega3i := [dz - (t + x*y + x*z)*dx - (x*z*t + y - x*y)*dy, dt - (y + z - 3*x)*dx - (z*t - y)*dy];
|
| (7.5.13) |
Exercise 3[ii]
M8 >
|
Omega3ii := [dx + dy + dz + (x + 1)*dt, x*dx*y*dy + z*dz - x*dt];
|
| (7.5.14) |
|
Solution
|
|
We write a simple program to test if a Pfaffian system is integrable.
E4 >
|
IntegrablePfaffianSystem := proc(Omega)
|
E4 >
|
local nu, i, p, alpha, beta, C;
|
E4 >
|
nu := DGzip(Omega, "wedge");
|
E4 >
|
for i from 1 to p do
|
E4 >
|
alpha := ExteriorDerivative(Omega[i]);
|
E4 >
|
beta := simplify(alpha &wedge nu);
|
E4 >
|
C := Tools:-DGinfo(beta, "CoefficientSet");
|
E4 >
|
if C <> {0} then return(false, i) fi;
|
>
|
map(IntegrablePfaffianSystem, [Omega1i, Omega1ii, Omega1iii, Omega1iv]);
|
| (7.5.1.1) |
M3 >
|
map(IntegrablePfaffianSystem, [Omega2i, Omega2ii, Omega2iii, Omega2iv, Omega2v, Omega2vi]);
|
| (7.5.1.2) |
|
|
|
Exercise 6
|
|
This exercise is based upon Example 2, page 103, of Flanders, Differential Forms with Applications to the Physical Sciences, where the system of equations
d(A) = ThetaA - A Theta (*)
is considered. Here Theta is a given p x p matrix of 1-forms and (*) is to be solved for the p x p matrix A of functions. The integrability conditions for this system is that there is a 2-form alpha such that
d(Theta) - Theta &w Theta = alpha I and d(alpha) = 0 (**)
where I is the identity matrix.
[i] Write a program which checks these integrability conditions. Test your program on the following matrices.
M5 >
|
with(DifferentialGeometry): with(Tools):
|
M5 >
|
DGsetup([x, y], M2):
|
M2 >
|
DGsetup([x, y, z], M3):
|
M2 >
|
Theta1:= Matrix([[x &mult dy, ((1/(x^2) + 1/x*y + y^2) &mult dx) &plus ((x*y) &mult dy)], [0 &mult dx, (-y) &mult dx]]);
|
| (7.6.1) |
M3 >
|
Theta2 := Matrix(evalDG([[z*dy, -1/x*dy - y*(y + z)/x*dz], [x*dz, 1/x*dx + z*dy + (2*y + z)*dz]]));
|
| (7.6.2) |
M3 >
|
Theta3 := Matrix(evalDG([[dx, exp(-y)*dx, -z^2*y*dx + z^2*dy + (-1 - x + z^2*y + 2*y*z)*dz], [0 &mult dx, dy, exp(y)*dx + x*exp(y)*dz], [0 &mult dx, 0 &mult dx, dz]]));
|
| (7.6.3) |
[ii] Write a program which solves (*) for a given Omega and a given (optional) set of initial values for A. Apply to the matrices Theta1, Theta2, Theta3.
|
Solution
|
|
Part [i]
M3 >
|
CheckIntegrablity := proc(Theta, {show := false})
|
M3 >
|
local p, Id, Omega1, Omega2, alpha, beta, Fr, n;
|
M3 >
|
p := LinearAlgebra:-RowDimension(Theta):
|
M2 >
|
Fr := Tools:-DGinfo(Theta[1, 1], "ObjectFrame");
|
M2 >
|
n := Tools:-DGinfo(Fr, "FrameBaseDimension");
|
M3 >
|
Id := LinearAlgebra:-IdentityMatrix(p);
|
M3 >
|
Omega1 := ExteriorDerivative(Theta) &MatrixMinus (Theta &MatrixWedge Theta); end;
|
M3 >
|
alpha := Omega1[1, 1];
|
M3 >
|
use Tools in Omega2 := Id &MatrixMult alpha;
|
M3 >
|
if not LinearAlgebra:-Equal(Omega1, Omega2) then
|
M3 >
|
if show = true then return(Omega1) else return(false) fi;
|
M2 >
|
then beta := ExteriorDerivative(alpha);
|
M3 >
|
if Tools:-DGinfo(beta, "CoefficientSet") <> {0} then
|
M3 >
|
if show = true then return(alpha) else return(false) fi;
|
Use the program CheckIntegrability to verfy that Theta1, Theta2, Theta3 satisfy the integrablity condition (*).
M2 >
|
CheckIntegrablity(Theta1);
|
| (7.6.1.1) |
M2 >
|
CheckIntegrablity(Theta2);
|
| (7.6.1.2) |
M3 >
|
CheckIntegrablity(Theta3);
|
| (7.6.1.3) |
Part [ii]
M3 >
|
Flanders := proc(Theta, {initialpoint := [], initialvalue := []})
|
M3 >
|
local Fr, vars, p, A, UnknownFunctions, M, Eq1, Eq2, Eq3, Soln, A0, IC;
|
M3 >
|
Fr := Tools:-DGinfo(Theta[1, 1], "ObjectFrame");
|
M3 >
|
vars := op(Tools:-DGinfo(Fr, "FrameIndependentVariables"));
|
M3 >
|
p := LinearAlgebra:-RowDimension(Theta);
|
M3 >
|
A := Matrix(p, p, (i, j) -> F||i||j(vars));
|
M3 >
|
UnknownFunctions := convert(A, set);
|
M3 >
|
use Tools in M := ExteriorDerivative(A) &MatrixMinus ((Theta &MatrixMult A) &MatrixMinus (A &MatrixMult Theta)) end:
|
M3 >
|
Eq1 := convert(M, set);
|
M3 >
|
Eq2 := map(Tools:-DGinfo, Eq1, "CoefficientSet");
|
M3 >
|
Eq3 := map(op, Eq2);
|
M3 >
|
if initialpoint <>[] then
|
M3 >
|
A0 := eval(A, initialpoint);
|
M3 >
|
IC := convert(A0 - initialvalue, set);
|
M3 >
|
Soln := [pdsolve(Eq3, IC)];
|
M3 >
|
Soln := [pdsolve(Eq3, UnknownFunctions)];
|
M3 >
|
seq(eval(A, S), S = Soln);
|
| (7.6.1.4) |
| (7.6.1.5) |
| (7.6.1.6) |
|
|
|
Exercise 7
|
|
Find the left and right invariant forms and vector fields for the following 6 dimensional matrix group.
M3 >
|
P := Matrix([[x1, x3, 0, x4], [0, x1, 0, x5], [0, 0, x2, x6], [0, 0, 0, 1]]);
|
| (7.7.1) |
|
Solution
|
|
M3 >
|
with(DifferentialGeometry): with(Tools):
|
M3 >
|
DGsetup([x1, x2, x3, x4, x5, x6], G):
|
Calculate the left invariant 1-forms.
G >
|
OmegaL0 := (P^(-1)) &MatrixMult ExteriorDerivative(P);
|
| (7.7.1.1) |
G >
|
OmegaL := [OmegaL0[1, 1], OmegaL0[1, 2], OmegaL0[1, 4], OmegaL0[2, 4], OmegaL0[3, 3], OmegaL0[3, 4]];
|
| (7.7.1.2) |
Calculate the left invariant vector fields.
G >
|
XL := DualBasis(OmegaL);
|
| (7.7.1.3) |
Calculate the right invariant 1-forms.
G >
|
OmegaR0 := ExteriorDerivative(P) &MatrixMult (P^(-1));
|
| (7.7.1.4) |
G >
|
OmegaR := [OmegaR0[1, 1], OmegaR0[1, 2], OmegaR0[1, 4], OmegaR0[2, 4], OmegaR0[3, 3], OmegaR0[3, 4]];
|
| (7.7.1.5) |
Calculate the right invariant vector fields.
G >
|
XR := DualBasis(OmegaR);
|
| (7.7.1.6) |
Check the invariance of the right invariant 1-forms.
G >
|
Matrix(6, 6, (i, j) -> LieDerivative(XL[i], OmegaR[j]));
|
| (7.7.1.7) |
Check that the left invariant vector fields and the rigth invariant vector fields commute.
G >
|
Matrix(6, 6, (i, j) -> LieDerivative(XL[i], XR[j]));
|
| (7.7.1.8) |
Check the invariance of the left invariant 1-forms.
G >
|
Matrix(6, 6, (i, j) -> LieDerivative(XR[i], OmegaL[j]));
|
| (7.7.1.9) |
|
|
|
�Ian M. Anderson 2006
|