Lesson 10: Tensor Analysis - 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 10: Tensor Analysis

 

 

Overview

Connections and Christoffel symbols, Torsion tensors

Covariant derivatives

Curvature tensors, Ricci tensor, Ricci scalar, Einstein tensor, Weyl tensor, Cotton tensor

Exercises

Overview

 

In this lesson, you will learn to do the following:

– 

Construct a connection and compute its torsion.

– 

Compute the Christoffel connection from a metric.

– 

Calculate the covariant derivative of a tensor.

– 

Calculate the Riemann curvature tensor of a connection.

– 

Calculate the Ricci tensor, the scalar curvature, the Einstein tensor.

– 

Calculate the Weyl tensor.

Connections and Christoffel symbols, Torsion tensors

 

To create an affine connection, first construct a tensor with the desired components and then use the Connection command.  The torsion of the connection is computed with the TorsionTensor command.

>

with(DifferentialGeometry): with(Tensor):

DGsetup([x, y], E2):

E2 > 

T := evalDG(y*dx &t D_y &t dy);

(2.1)
E2 > 

C := Connection(T);

(2.2)
E2 > 

S := TorsionTensor(C);

(2.3)

 

Remark 1.  Although the display for the tensor T and the connection C are the same, the internal representations are different.

E2 > 

Tools:-DGinfo(T, "ObjectType");

(2.4)
E2 > 

Tools:-DGinfo(C, "ObjectType");

(2.5)

 

Remark 2.  We illustrate the fact that the rules for transforming and Lie differentiating the tensor T and the connection C are different.

E2 > 

X := evalDG(x^3*D_x);

(2.6)

 

Here are the Lie derivatives of T and C.

E2 > 

LieDerivative(X, T);

(2.7)
E2 > 

LieDerivative(X, C);

(2.8)
E2 > 

Phi := Transformation(E2, E2, [x = 1/x, y = 1/y]);

(2.9)
E2 > 

InvPhi := InverseTransformation(Phi);

(2.10)

 

Here are the transformations of T and C.

E2 > 

PushPullTensor(Phi, InvPhi, T);

(2.11)
E2 > 

PushPullTensor(Phi, InvPhi, C);

(2.12)

 

The command Christoffel is used to construct the Christoffel connection for a metric g.  With the optional argument "FirstKind", the Christoffel symbols of the first kind are computed.

E2 > 

g := evalDG((1/y^2)*(dx &t dy + dy &t dx));

(2.13)
E2 > 

Christoffel(g);

(2.14)
E2 > 

C2 := Christoffel(g, "FirstKind");

(2.15)
E2 > 

type(g1, DGmetric);

(2.16)

Covariant derivatives

 

Let T be a tensor of type (r, s) (r = number of contravariant (upper) indices = number of 1-form arguments, s = number of covariant (lower) indices = number of vector arguments).  The command DirectionalCovariantDerivative calculates the covariant derivative of T in the direction of a given vector field and with respect to a given connection -- a tensor of type (r, s) is returned.  The command CovariantDerivative returns the covariant derivative of T as an (r, s + 1) tensor.

E2 > 

with(DifferentialGeometry): with(Tensor):

E2 > 

DGsetup([x, y], E2):

 

Define a vector field X, a connection C, and tensors T1 and T2.

E2 > 

X := evalDG(a*D_x + b*D_y);

(3.1)
E2 > 

C := Connection(alpha*dx &t D_y &t dy + beta*dy &t D_x &t dx);

(3.2)
E2 > 

T1 := evalDG(dx &t D_x);

(3.3)
E2 > 

T2 := evalDG(f(x, y)*dy &t D_y);

(3.4)

 

Calculate the covariant derivative of T1.

E2 > 

dT1 := CovariantDerivative(T1, C);

(3.5)

 

Calculate the directional derivative of T1.

E2 > 

DirectionalCovariantDerivative(X, T1, C);

(3.6)

 

Show that the directional covariant derivative is the contraction of the vector field X with the covariant derivative dT1.

E2 > 

ContractIndices(X, dT1, [[1, 3]]);

(3.7)

 

Conversely, calculate the covariant derivative dT1 from the directional covariant derivatives of T1 in the coordinate directions.

E2 > 

evalDG((DirectionalCovariantDerivative(D_x, T1, C) &t dx) + (DirectionalCovariantDerivative(D_y, T1, C) &t dy));

(3.8)

 

Calculate the covariant derivative of T2.

E2 > 

CovariantDerivative(T2, C);

(3.9)

 

Connections on vector bundles can also be defined.

E2 > 

DGsetup([x, y ,z], [u, v], E);

(3.10)
E > 

C1 := Connection(alpha*dv &t D_v &t dx + beta*du &t D_u &t dy);

(3.11)

 

Define a tensor field T3 on the vector bundle E and take its covariant derivative.

E > 

T3 := evalDG(y*du &t D_v);

(3.12)
E > 

dT3 := CovariantDerivative(T3, C1);

(3.13)

 

Define a mixed tensor T4 -- i.e. a tensor product of tensors on the vector bundle and tensors on the tangent bundle.  To covariantly differentiateT4, a connection C2 on the tangent bundle is also required.

E > 

T4 := evalDG(x*dx &t D_v);

(3.14)
E > 

C2 := Connection(gamma*dx &t D_x &t dx);

(3.15)
E > 

dT4 := CovariantDerivative(T4, C1, C2);

(3.16)

 

The order in which the connections are specified does not matter.

E > 

CovariantDerivative(T4, C2, C1);

(3.17)

Curvature tensors, Ricci tensor, Ricci scalar, Einstein tensor, Weyl tensor, Cotton tensor

 

These tensors are readily computed using the CurvatureTensor, RicciTensor, RicciScalar, EinsteinTensor, WeylTensor and CottonTensor commands.  The CurvatureTensor command accepts either an arbitrary affine connection (connection on the tangent bundle),  a connection on a vector bundle or a metric.  The RicciTensor command computes the Ricci tensor for an arbitrary affine connection.  The RicciScalar, EinsteinTensor, WeylTensor, and Cotton tensor commands may only be computed for metric connections.

E > 

with(DifferentialGeometry): with(Tensor):

 

Example 1.

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

 

Define a metric g.

M > 

g := (1/(k^2 + x^2 + y^2 + z^2)^2) &mult evalDG((dx &t dx + dy &t dy + dz &t dz ));

(4.1)

 

Calculate the Christoffel connection of g.

M > 

C := Christoffel(g);

(4.2)

 

Calculate the curvature tensor for the metric g from its Christoffel symbol C.

M > 

R := CurvatureTensor(C);

(4.3)

 

Calculate the Ricci tensor from the curvature tensor.

M > 

RicciTensor(R);

(4.4)

 

Calculate the Ricci scalar from the metric and its curvature tensor.

M > 

RicciScalar(g, R);

(4.5)

 

Calculate the Einstein tensor from the metric and its curvature tensor.

M > 

EinsteinTensor(g, R);

(4.6)

 

Calculate the Cotton tensor from the metric, its Christoffel connection and its curvature.  The Cotton tensor vanishes because the metric is conformally flat.

M > 

CottonTensor(g, C, R);

(4.7)

 

Example 2.

For a general affine connection, we can still compute the curvature and Ricci tensors.  Note that the Ricci tensor is no longer symmetric.

M > 

C := Connection(z^2*dz &t D_y &t dx - x^2*dy &t D_x &t dz);

(4.8)
M > 

R := CurvatureTensor(C);

(4.9)
M > 

RicciTensor(R);

(4.10)

 

Example 3.

The CurvatureTensor command also computes the curvature tensor of a connection on a vector bundle.

M > 

DGsetup([x, y, z], [u, v], E);

(4.11)
E > 

C := Connection(z^2*du &t D_v &t dx);

(4.12)
E > 

CurvatureTensor(C);

(4.13)

Exercises

Exercise 1

 

Let g be a metric.  Then the Laplacian of a function f with respect to the metric g is defined as the trace of the second covariant derivative of f (that is, the contraction of the second covariant derivative with the inverse of the metric).  Use this definition to calculate the Laplacian of a function in spherical coordinates.

Hint: Use the PushPullTensor command to transform the standard metric on Euclidean space to spherical coordinates.

 

E > 

with(DifferentialGeometry): with(Tensor):

 

Solution

 

Define Cartesian and spherical coordinate systems.

E > 

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

Euc > 

DGsetup([rho, theta, phi], Sph):

 

Define the Euclidean metric on Euc and use the PushPullTensor command to  rewrite this metric in spherical coordinates.

Sph > 

gEuc := evalDG(dx &t dx + dy &t dy + dz &t dz);

(5.1.1.1)
Euc > 

T := Transformation(Sph, Euc, [x = rho*cos(theta)*sin(phi), y = rho*sin(theta)*sin(phi), z = rho*cos(phi)]);

(5.1.1.2)
Sph > 

gSph := Pullback(T, gEuc);

(5.1.1.3)

 

Calculate the inverse of the metric gSph.

Sph > 

h := InverseMetric(gSph);

(5.1.1.4)

 

Calculate the Christoffel connection for the metric gSph.

Sph > 

C := Christoffel(gSph);

(5.1.1.5)

 

Calculate the covariant derivative of the function f.

Sph > 

PDEtools:-declare(f(rho, theta, phi));

(5.1.1.6)
Sph > 

df := CovariantDerivative(f(rho, theta, phi), C);

(5.1.1.7)

 

Calculate the 2nd covariant derivative of the function f.

Sph > 

d2f := CovariantDerivative(df, C);

(5.1.1.8)

 

Calculate the Laplacian of f.

Sph > 

Lap := ContractIndices(h, d2f, [[1, 1], [2, 2]]);

(5.1.1.9)
Sph > 

simplify(Lap, [cos(phi)^2 = 1 - sin(phi)^2]);

(5.1.1.10)

Exercise 2

 

An affine connection nabla on a manifold M is abstractly defined as a mapping (X,Y) -> nabla_X(Y) -- the directional covariant derivative of a vector field Y in the direction of the vector field X.  In terms of this definition, the curvature tensor R is defined by

R(X, Y)(Z) = nabla_X(nabla_Y(Z)) - nabla_Y(nabla_X(Z)) - nabla_[X, Y](Z).

Here X, Y and Z are vector fields on M and R(X, Y)(Z)  denotes the contraction of R against the vector fields X, Y, Z  over the 3rd ,4th and 1st indices respectively. Also, [X, Y] is the Lie bracket of X and Y.

 

Write a program CheckCurvatureDefinition whose arguments are a connection, its curvature and 3 vector fields and which checks the validity of this definition.  Test your program on the following example.

 

Sph > 

with(DifferentialGeometry): with(Tensor):

Sph > 

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

M > 

C := Connection(x^2*dx &t D_y &t dz - y*z*dz &t D_z &t dy);

(5.2.1)
M > 

X1, Y1, Z1 := evalDG(x*D_y - y^2*D_z), evalDG(z^2*D_x + x*y*D_y), evalDG(y*z*D_x + z^2*D_z);

(5.2.2)

 

Solution

 

M > 

CheckCurvatureDefinition := proc(C, R, X, Y, Z)

M > 

local LHS, RHS1, RHS2, RHS3, W, Ans;

M > 

LHS := ContractIndices(Z &tensor X &tensor Y, R, [[1, 2], [2, 3], [3, 4]]);

M > 

RHS1 := DirectionalCovariantDerivative(X, DirectionalCovariantDerivative(Y, Z, C), C);

M > 

RHS2 := DirectionalCovariantDerivative(Y, DirectionalCovariantDerivative(X, Z, C), C);

M > 

W := LieBracket(X, Y);

M > 

RHS3 := DirectionalCovariantDerivative(W, Z, C);

M > 

Ans := evalDG(LHS - (RHS1 - RHS2 - RHS3));

M > 

simplify(Ans):

M > 

end:

M > 

R := CurvatureTensor(C);

(5.2.1.1)
M > 

CheckCurvatureDefinition(C, R, X1, Y1, Z1);

(5.2.1.2)

Exercise 3

 

Check that the curvature tensor (as a rank 4 covariant tensor) for the metric g satisfies the following identities:

[i]  skew-symmetric in the indices 1, 2.

[ii]  skew-symmetric in the indices 3, 4.

[iii]  cyclic permutation of the indices 2, 3, 4 vanishes.

[iv]  symmetric under interchange of the indices 1 <--> 3 and 2 <--> 4.

[v]  cyclic permutation of the indices 3, 4, 5 of the covariant derivative of R vanishes.

 

M > 

with(DifferentialGeometry): with(Tensor):

M > 

DGsetup([x, y, z, w], M):

M > 

g := evalDG(exp(z)*dx &t dx + exp(x)*dy &t dy + exp(w)*dz &t dz + dw &t dw);

(5.3.1)

 

Solution

 

M > 

C := Christoffel(g);

(5.3.1.1)
M > 

R0 := CurvatureTensor(C);

(5.3.1.2)
M > 

R := RaiseLowerIndices(g, R0, [1]);

(5.3.1.3)

 

Part [i]

M > 

SymmetrizeIndices(R, [1, 2], "Symmetric");

(5.3.1.4)

 

Part [ii]

M > 

SymmetrizeIndices(R, [3, 4], "Symmetric");

(5.3.1.5)

 

Part [iii]

M > 

SymmetrizeIndices(R, [2, 3, 4], "SkewSymmetric");

(5.3.1.6)

 

Part [iv]

M > 

R &minus RearrangeIndices(R, [[1, 3], [2, 4]]);

(5.3.1.7)

 

Part [v]

M > 

R1 := CovariantDerivative(R, C):

M > 

SymmetrizeIndices(R1, [3, 4, 5], "SkewSymmetric");

(5.3.1.8)

Exercise 4

 

The covariant divergence of the Einstein tensor is identically zero.  Check this identity for the metric in Exercise 3.

 

M > 

with(DifferentialGeometry): with(Tensor):

M > 

DGsetup([x, y, z, w], M):

M > 

g := evalDG(exp(z)*dx &t dx + exp(x)*dy &t dy + exp(w)*dz &t dz + dw &t dw);

(5.4.1)

 

Solution

 

Calculate the Christoffel connection.

M > 

C := Christoffel(g):

 

Calculate the curvature tensor.

M > 

R0 := CurvatureTensor(C):

 

Calculate the Einstein tensor.

M > 

E := EinsteinTensor(g, R0);

(5.4.1.1)

 

Calculate the covariant derivative of the Einstein tensor.

M > 

dE := CovariantDerivative(E, C);

(5.4.1.2)

 

Contract the 2nd and 3rd indices of dE.

M > 

ContractIndices(dE, [[2, 3]]);

(5.4.1.3)

Exercise 5

 

For what values of a1, a2, a3, a4 does the metric g have vanishing Ricci tensor.  (See Stephani, Kramer et. al., page 197.)

 

M > 

with(DifferentialGeometry): with(Tensor):

M > 

DGsetup([x1, x2, x3, x4], M):

M > 

G := LinearAlgebra:-DiagonalMatrix([x4^(2*a1), x4^(2*a2), x4^(2*a3), x4^(2*a4)]);

M > 

g := convert(G, DGtensor, [["cov_bas", "cov_bas"], []]);

(5.5.1)

 

Solution

 

M > 

C := Christoffel(g);

(5.5.1.1)
M > 

R := CurvatureTensor(C);

(5.5.1.2)
M > 

Ric := RicciTensor(R);

(5.5.1.3)
M > 

Constraints := [a1 + a2 + a3 = a4 + 1, a1^2 + a2^2 + a3^2 = (a4 + 1)^2];

(5.5.1.4)
M > 

Tools:-DGmap(1, simplify, Ric, Constraints);

(5.5.1.5)

Exercise 6

 

A vector field is parallel with respect to a connection C if  and only if covariant derivative vanishes. The integrability conditions  which insure the existence of a basis of parallel vector fields is given by the vanishing of the curvature tensor.

 

[i]  Check that the curvature tensor of the symmetric connection C vanishes.

[ii]  Then use the Maple pdsolve command to find a set of 3 vector fields X1, X2, X3 which are parallel with respect to C and satisfy X1(p) = D_x, X2(p) = D_y, and X3(p) = D_z, where p = [1, 1, 1].

 

M > 

with(DifferentialGeometry): with(Tensor):

E3 > 

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

E3 > 

C := Connection((1/y)*dx &t D_x &t dy - (1/z)*dx &t D_x &t dz + (1/y)*dy &t D_x &t dx - (1/z)*dy &t D_y &t dz - (1/z)*dz &t D_x &t dx - (1/z)*dz &t D_y &t dy - (2/z)*dz &t D_z &t dz);

(5.6.1)

 

Solution

 

Part [i]

E3 > 

CurvatureTensor(C);

(5.6.1.1)

 

Part [ii]

First create a vector field on E3 with arbitrary coefficients.

E3 > 

PDEtools:-declare([a, b, c](x, y, z), quiet);

E3 > 

U0 := evalDG(a(x, y, z)*D_x + b(x, y, z)*D_y + c(x, y, z)*D_z);

(5.6.1.2)

 

Calculate the covariant derivative of the vector field U0 with respect to the connection C.

E3 > 

V := CovariantDerivative(U0, C);

(5.6.1.3)

 

Solve the partial differential equations obtained by setting the coefficients of the covariant derivatives to 0.

E3 > 

Eq := Tools:-DGinfo(V, "CoefficientSet");

(5.6.1.4)
E3 > 

soln := pdsolve(Eq);

(5.6.1.5)

 

Back substitute the solution to the equations Eq into the vector field U0.

E3 > 

U1 := eval(U0, soln);

(5.6.1.6)
E3 > 

U2 := eval(U1, [x = 1, y = 1, z = 1]);

(5.6.1.7)

 

Determine the values for _C1, _C2, _C3 to match the initial values specified in the problem.

E3 > 

X := Tools:-DGsimplify(eval(U1, {_C1 = 0, _C2 = 0, _C3 = 1}));

(5.6.1.8)
E3 > 

Y := Tools:-DGsimplify(eval(U1, {_C1 = 0, _C2 = -1, _C3 = 1}));

(5.6.1.9)
E3 > 

Z := Tools:-DGsimplify(eval(U1, {_C1 = 1, _C2 = 1, _C3 = -1}));

(5.6.1.10)

 

Remark. The Lie brackets of X, Y, and Z all vanish.

E3 > 

LieBracket(X, Y), LieBracket(X, Z), LieBracket(Y, Z);

(5.6.1.11)

Exercise 7

 

The following exercise appears in Lovelock and Rund, page 178, and also Spivak, page 320.

 

Let A be a symmetric rank 2 covariant tensor on R^n.  Let nabla denote covariant differentiation with respect to the zero connection on R^n and consider the system of  PDEs

A = SymmetrizeIndices(nabla(U), [1, 2], symmetric)  (*)

The integrability conditions for the equations (*) are

SymmetrizeIndices(nabla(nabla(A), [[1, 3], [2, 4]], skewsymmetric) = 0  (**)

 

[i]  Write a program which checks these integrability conditions.

[ii]  Integrate the equations (*) by using two applications of the homotopy operator for the exterior derivative operator.

 

Use the following tensors to check your programs.

 

E3 > 

with(DifferentialGeometry): with(Tensor):

E3 > 

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

M3 > 

DGsetup([x, y, z, w], M4):

M4 > 

ChangeFrame(M3):

M3 > 

A1 := evalDG((y + z)*dx &t dz + x*dy &t dz + (y + z)*dz &t dx + x*dz &t dy);

(5.7.1)
M3 > 

A2 := evalDG(-2/(x^2 + y^2 + z^2)^2*x*dx &t dx - 1/(x^2 + y^2 + z^2)^2*y*dx &t dy - 1/(x^2 + y^2 + z^2)^2*z*dx &t dz - 1/(x^2 + y^2 + z^2)^2*y*dy &t dx - 1/(x^2 + y^2 + z^2)^2*z*dz &t dx);

(5.7.2)
M3 > 

ChangeFrame(M4):

M4 > 

A3 := evalDG(1/2*cos(x)*sin(y)*sin(z)*dx &t dw + 1/2*sin(x)*cos(y)*sin(z)*dy &t dw + 1/2*sin(x)*sin(y)*cos(z)*dz &t dw + 1/2*cos(x)*sin(y)*sin(z)*dw &t dx + 1/2*sin(x)*cos(y)*sin(z)*dw &t dy + 1/2*sin(x)*sin(y)*cos(z)*dw &t dz);

(5.7.3)

 

Hint: Here is a program which computes the right-hand side of (*).

M4 > 

Delta:= (U,C) -> SymmetrizeIndices(CovariantDerivative(U, C), [1, 2], "Symmetric"):

 

Solution

 

M3 > 

CheckIntegrability := proc(A, C)

M3 > 

local T;

M3 > 

T := CovariantDerivative(CovariantDerivative(A, C), C):

M3 > 

SymmetrizeIndices(SymmetrizeIndices(T, [1, 3], "SkewSymmetric"), [2, 4], "SkewSymmetric");

M4 > 

end:

M4 > 

 

M3 > 

Solve := proc(A, C)

M3 > 

local Fr, n, B, Omega, T, i, j, alpha, beta, omega, theta, S, U;

M3 > 

Fr := Tools:-DGinfo(A, "ObjectFrame");

M3 > 

n := Tools:-DGinfo(Fr, "FrameBaseDimension");

M3 > 

B := Tools:-DGinfo(Fr, "FrameBaseVectors");

M3 > 

Omega := Tools:-DGinfo(Fr, "FrameBaseForms");

M3 > 

T := CovariantDerivative(A, C);

M3 > 

omega := Tools:-DGzero("form", 2);

M3 > 

for i to n do for j to n do

M3 > 

alpha := ContractIndices(B[i] &tensor B[j], T, [[1, 2], [2, 3]]) &minus ContractIndices(B[j] &tensor B[i], T, [[1, 2], [2, 3]]);

M3 > 

beta := convert(alpha, DGform);

M3 > 

theta := DeRhamHomotopy(beta, args[3 .. -1]);

M3 > 

omega := omega &plus (theta &mult (Omega[i] &wedge Omega[j]));

M3 > 

od;

M3 > 

od;

M3 > 

S := A &plus ((1/2) &mult (convert(omega, DGtensor)));

M3 > 

U := Tools:-DGzero("form", 1);

M3 > 

for i to n do

M3 > 

alpha := ContractIndices(convert(B[i], DGtensor), S, [[1, 1]]);

M3 > 

beta := convert(alpha, DGform);

M3 > 

theta := DeRhamHomotopy(beta, args[3 .. -1]);

M3 > 

U := U &plus (theta &mult (Omega[i]));

M3 > 

od:

M3 > 

convert(U, DGtensor):

M4 > 

end:

 

Part [i]

M4 > 

ChangeFrame(M3):

M3 > 

C := Connection(0 &mult dx &t D_x &t dx);

(5.7.1.1)
M3 > 

CheckIntegrability(A1, C);

(5.7.1.2)
M3 > 

U1 := Solve(A1, C);

(5.7.1.3)
M3 > 

A1 &minus Delta(U1, C);

(5.7.1.4)

 

Part [ii]

M3 > 

CheckIntegrability(A2, C);

(5.7.1.5)
M3 > 

U2 := Solve(A2, C, integrationlimits = [infinity, 1]);

(5.7.1.6)
M3 > 

A2 &minus Delta(U2, C);

(5.7.1.7)

 

Part [iii]

M3 > 

ChangeFrame(M4):

M4 > 

C := Connection(0 &mult dx &t D_x &t dx);

(5.7.1.8)
M4 > 

U3 := Solve(A3, C);

(5.7.1.9)
M4 > 

U3 := map(expand, U3);

(5.7.1.10)
M4 > 

A3 &minus Delta(U3, C);

(5.7.1.11)

Exercise 8

 

Use the Maple pdsolve command to determine which of the following connections C1, C2, C3 are the Christoffel symbols of a metric.

 

M4 > 

with(DifferentialGeometry): with(Tensor):

M4 > 

DGsetup([x, y], E2);

(5.8.1)
E2 > 

C1 := Connection(x*dx &t D_y &t dx);

(5.8.2)
E2 > 

C2 := Connection(y^2*dx &t D_y &t dx);

(5.8.3)
E2 > 

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

(5.8.4)
E3 > 

C3 := Connection((-1/x)*dx &t D_x &t dx - (1/2/x)*dx &t D_y &t dy - (1/2/z)*dy &t D_x &t dy - (1/2/x)*dy &t D_y &t dx - (1/2/z)*dy &t D_y &t dz - (1/2/x)*dy &t D_z &t dy - (1/2/z)*dz &t D_y &t dy - (1/z)*dz &t D_z &t dz);

(5.8.5)

 

Solution

 

E3 > 

PDEtools:-declare([a, b, c](x, y), quiet);

E3 > 

ChangeFrame(E2):

E2 > 

g := evalDG(a(x, y)*dx &t dx + 2*b(x, y)*dx &s dy + c(x, y)*dy &t dy);

(5.8.1.1)

 

Part 1.

E2 > 

k1 := CovariantDerivative(g, C1);

(5.8.1.2)
E2 > 

Eq1 := Tools:-DGinfo(k1, "CoefficientSet");

(5.8.1.3)
E2 > 

soln1 := pdsolve(Eq1);

(5.8.1.4)
E2 > 

g1 := eval(g, soln1);

(5.8.1.5)
E2 > 

Christoffel(g1);

(5.8.1.6)

 

Part 2.

E2 > 

k2 := CovariantDerivative(g, C2);

(5.8.1.7)
E2 > 

Eq2 := Tools:-DGinfo(k2, "CoefficientSet");

(5.8.1.8)
E2 > 

soln2 := pdsolve(Eq2);

(5.8.1.9)
E2 > 

Tools:-DGsimplify(eval(g, soln2));

(5.8.1.10)

The metric is degenerate so that C2 is not a metric connection.

 

Part 3.

E2 > 

vars := [seq(a||i, i = 1 .. 6)](x, y, z):

E2 > 

PDEtools:-declare(vars, quiet);

E2 > 

ChangeFrame(E3):

E3 > 

S := GenerateSymmetricTensors([dx, dy, dz], 2);

(5.8.1.11)
E3 > 

g := DGzip(vars, S, "plus");

(5.8.1.12)
E3 > 

k3 := CovariantDerivative(g, C3);

(5.8.1.13)

(5.8.1.14)
E3 > 

Eq3 := Tools:-DGinfo(k3, "CoefficientSet");

(5.8.1.15)
E3 > 

soln3 := pdsolve(Eq3);

(5.8.1.16)
E3 > 

g3 := Tools:-DGsimplify(eval(g, soln3));

(5.8.1.17)
E3 > 

Christoffel(g3);

(5.8.1.18)

Exercise 9

 

Check that the metric g is conformally flat.  Use pdsolve to find a function sigma such that sigma*g is flat.

 

M > 

with(DifferentialGeometry): with(Tensor):

M > 

DGsetup([x, y, z, w], M):

M > 

g := evalDG(dx &t dy + exp(-y)*(dx &s dz) + dy &t dx - dy &t dz - dz &t dy + 1/4*exp(y)*dw &t dw);

(5.9.1)

 

Solution

 

M > 

with(Tools):

M > 

C := Christoffel(g):

M > 

R := CurvatureTensor(C):

M > 

DGinfo(R, "CoefficientList", [dx &t D_y &t dy &t dz]);

(5.9.1.1)
M > 

WeylTensor(g, R);

(5.9.1.2)
M > 

PDEtools:-declare(sigma(x, y, z, w));

(5.9.1.3)
M > 

k := sigma(x, y, z, w) &mult g;

(5.9.1.4)
M > 

C := Christoffel(k):

M > 

R := CurvatureTensor(C):

M > 

Eq := simplify(DGinfo(R, "CoefficientSet")):

M > 

nops(Eq);

(5.9.1.5)
M > 

soln := pdsolve(Eq);

(5.9.1.6)
M > 

pdetest(sigma(x, y, z, w) = exp(y), Eq);

(5.9.1.7)
M > 

gFlat := eval(k, sigma(x, y, z, w) = exp(y));

(5.9.1.8)
M > 

C := Christoffel(gFlat);

(5.9.1.9)
M > 

CurvatureTensor(C);

(5.9.1.10)
M > 

 


Download Help Document