Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
sagemanifolds
GitHub Repository: sagemanifolds/IntroToManifolds
Path: blob/main/16Manifold_Ext_Der.ipynb
Views: 80
Kernel: SageMath 9.6

16. Exterior derivative

This notebook is part of the Introduction to manifolds in SageMath by Andrzej Chrzeszczyk (Jan Kochanowski University of Kielce, Poland).

version()
'SageMath version 9.6, Release Date: 2022-05-15'

If (x1,,xn)(x^1,\ldots,x^n) are local coordinates on a smooth manifold MM, then from (14.9) we know that for any differential kk-form on MM

ω=1i1<<iknωi1...ikdxi1dxik=1k!ωi1...ikdxi1dxik.\omega=\sum_{1\leq i_1<\ldots<i_k\leq n}ω_{i_1 ...i_k}dx^{i_1}\wedge\ldots\wedge dx^{i_k}= \frac{1}{k!}ω_{i_1 ...i_k}dx^{i_1}\wedge\ldots\wedge dx^{i_k}.

The exterior derivative of ω \omega\ can be defined locally by

ParseError: KaTeX parse error: Undefined control sequence: \label at position 278: …, \end{matrix} \̲l̲a̲b̲e̲l̲{}\tag{16.1} \e…

( dωi1ik \ d\omega_{i_1\ldots i_k}\ denotes the differential of the scalar function  ωi1ik\ \omega_{i_1\ldots i_k}).


Example 16.1

Take a 1-form and compute its exterior derivative.

%display latex dim = 3 # dimension of manifold N N = Manifold(dim, 'N') # manifold N X = N.chart(' '.join(['x'+str(i)+':x^{'+str(i)+'}' for i in range(dim)])) # chart on N al = N.diff_form(1, name=r'\alpha') # 1-form alpha def astr(i): return 'a_'+str(i) # names of components af = [N.scalar_field(function(astr(i))(*X), name=astr(i)) for i in range(dim)] # component functions al[:] = af # define all components al.disp() # show al

α=a0(x0,x1,x2)dx0+a1(x0,x1,x2)dx1+a2(x0,x1,x2)dx2\displaystyle \alpha = a_{0}\left({x^{0}}, {x^{1}}, {x^{2}}\right) \mathrm{d} {x^{0}} + a_{1}\left({x^{0}}, {x^{1}}, {x^{2}}\right) \mathrm{d} {x^{1}} + a_{2}\left({x^{0}}, {x^{1}}, {x^{2}}\right) \mathrm{d} {x^{2}}

Use the method exterior_derivative() to compute the result:

dal = al.exterior_derivative() dal.disp()

dα=(a0x1+a1x0)dx0dx1+(a0x2+a2x0)dx0dx2+(a1x2+a2x1)dx1dx2\displaystyle \mathrm{d}\alpha = \left( -\frac{\partial\,a_{0}}{\partial {x^{1}}} + \frac{\partial\,a_{1}}{\partial {x^{0}}} \right) \mathrm{d} {x^{0}}\wedge \mathrm{d} {x^{1}} + \left( -\frac{\partial\,a_{0}}{\partial {x^{2}}} + \frac{\partial\,a_{2}}{\partial {x^{0}}} \right) \mathrm{d} {x^{0}}\wedge \mathrm{d} {x^{2}} + \left( -\frac{\partial\,a_{1}}{\partial {x^{2}}} + \frac{\partial\,a_{2}}{\partial {x^{1}}} \right) \mathrm{d} {x^{1}}\wedge \mathrm{d} {x^{2}}

Let us apply the definition (16.1) for comparison:

# continuation dx = X.coframe() # (dx0,dx1,dx2) # apply the formula (16.1): s = sum([(af[i]).differential().wedge(dx[i]) for i in range(dim)]) # SageMath automatically displays the wedge products # with increasing indices of variables s.disp() # show the result

da0dx0+da1dx1+da2dx2=(a0x1+a1x0)dx0dx1+(a0x2+a2x0)dx0dx2+(a1x2+a2x1)dx1dx2\displaystyle \mathrm{d}a_0\wedge \mathrm{d} {x^{0}} + \mathrm{d}a_1\wedge \mathrm{d} {x^{1}} + \mathrm{d}a_2\wedge \mathrm{d} {x^{2}} = \left( -\frac{\partial\,a_{0}}{\partial {x^{1}}} + \frac{\partial\,a_{1}}{\partial {x^{0}}} \right) \mathrm{d} {x^{0}}\wedge \mathrm{d} {x^{1}} + \left( -\frac{\partial\,a_{0}}{\partial {x^{2}}} + \frac{\partial\,a_{2}}{\partial {x^{0}}} \right) \mathrm{d} {x^{0}}\wedge \mathrm{d} {x^{2}} + \left( -\frac{\partial\,a_{1}}{\partial {x^{2}}} + \frac{\partial\,a_{2}}{\partial {x^{1}}} \right) \mathrm{d} {x^{1}}\wedge \mathrm{d} {x^{2}}

Note that for example (since dxidxi=0dx^i\wedge dx^i=0)

da0dx0=(a0x0dx0+a0x1dx1+a0x2dx2)dx0=a0x1dx1dx0+a0x2dx2dx0=a0x1dx0dx1a0x2dx0dx2,da_0\wedge dx^0=(\frac{\partial a_0}{\partial x^0}dx^0+\frac{\partial a_0}{\partial x^1}dx^1+\frac{\partial a_0}{\partial x^2}dx^2)\wedge dx^0\\ =\frac{\partial a_0}{\partial x^1}dx^1\wedge dx^0+ \frac{\partial a_0}{\partial x^2}dx^2\wedge dx^0 =-\frac{\partial a_0}{\partial x^1}dx^0\wedge dx^1 -\frac{\partial a_0}{\partial x^2}dx^0\wedge dx^2,

and analogously for the remaining terms (in   da2dx2  \ \ da_2\wedge dx^2\ \ there is no need of reordering the terms).


Example 16.2

Consider now a 2-form and its exterior differential.

%display latex N=3 # dimension of the manifold M M = Manifold(N, 'M') # manifold M X = M.chart(' '.join(['x'+str(i)+':x^{'+str(i)+'}' for i in range(N)])) # chart on M a = M.diff_form(2, name='a') # 2-form a # components of the 2-form a: x0, x1, x2 = X[:] # coordinates x^0, x^1, x^2 of chart X as the Python variables x0, x1, x2 a01 = M.scalar_field(function('a01')(x0,x1,x2), name='a01') a02 = M.scalar_field(function('a02')(x0,x1,x2), name='a02') a12 = M.scalar_field(function('a12')(x0,x1,x2), name='a12') a[0,1] = a01; a[0,2] = a02 # define components of a a[1,2] = a12 # (up.triangle of comp.matr.) a.disp() # show a

a=a01(x0,x1,x2)dx0dx1+a02(x0,x1,x2)dx0dx2+a12(x0,x1,x2)dx1dx2\displaystyle a = a_{01}\left({x^{0}}, {x^{1}}, {x^{2}}\right) \mathrm{d} {x^{0}}\wedge \mathrm{d} {x^{1}} + a_{02}\left({x^{0}}, {x^{1}}, {x^{2}}\right) \mathrm{d} {x^{0}}\wedge \mathrm{d} {x^{2}} + a_{12}\left({x^{0}}, {x^{1}}, {x^{2}}\right) \mathrm{d} {x^{1}}\wedge \mathrm{d} {x^{2}}

The exterior derivative:

a.exterior_derivative().disp()

da=(a01x2a02x1+a12x0)dx0dx1dx2\displaystyle \mathrm{d}a = \left( \frac{\partial\,a_{01}}{\partial {x^{2}}} - \frac{\partial\,a_{02}}{\partial {x^{1}}} + \frac{\partial\,a_{12}}{\partial {x^{0}}} \right) \mathrm{d} {x^{0}}\wedge \mathrm{d} {x^{1}}\wedge \mathrm{d} {x^{2}}

In this case for each differential daijda_{ij} only one term of the form aijxidxi\frac{\partial a_{ij}}{\partial x^i}dx^i (no summation) gives a nonzero contribution to the final result. For example, for the second term of aa we have

da02dx0dx2=(a02x0dx0+a02x1dx1+a02x2dx2)dx0dx2=a02x1dx1dx0dx2=a02x1dx0dx1dx2.da_{02}\wedge dx^0\wedge dx^2=\Big(\frac{\partial a_{02}}{\partial x^0}dx^0+\frac{\partial a_{02}}{\partial x^1}dx^1+\frac{\partial a_{02}}{\partial x^2}dx^2\Big)dx^0\wedge dx^2\\ =\frac{\partial a_{02}}{\partial x^1}dx^1\wedge dx^0\wedge dx^2 =-\frac{\partial a_{02}}{\partial x^1}dx^0\wedge dx^1\wedge dx^2.

The calculations for the remaining terms are analogous.


Exterior derivative is antiderivation


ParseError: KaTeX parse error: Undefined control sequence: \label at position 53: …(−1)^k ω ∧ dη, \̲l̲a̲b̲e̲l̲{}\tag{16.2} \e…

for ωΩk(M)\omega\in\Omega^k(M) and ηΩm(M)\eta \in\Omega^m(M).

Using the linearity of the operation dd, it is enough to prove the antiderivation property for single terms ω=ωi1...ikdxi1dxikω = ω_{i_1 ...i_k} dx^{i_1} ∧ · · · ∧ dx^{i_k} and η=ηj1...jmdxj1dxjmη = η_{j_1 ... j_m }dx^{j_1} ∧· · · ∧ dx^{j_m} (no summation here). From (16.1) and (13.4) we obtain

d(ωη)=d(ωi1...ikηj1...jmdxi1dxikdxj1dxjm)=d(ωi1...ikηj1...jm)dxi1dxikdxj1dxjm=[(dωi1...ik)ηj1...jm+ωi1...ikdηj1...jm]dxi1dxikdxj1dxjm=(dωi1...ikdxi1dxik)(ηj1...jmdxj1dxjm)+(1)k(ωi1...ikdxi1dxik)(dηj1...jmdxj1dxjm)=dωη+(1)kωdη.d(ω ∧ η) = d( ω_{i_1 ...i_k} η_{j_1 ... j_m} dx^{i_1} ∧ · · · ∧ dx^{i_k} ∧ dx^{j_1} ∧ · · · ∧ dx^{j_m})\\ = d(ω_{i_1 ...i_k} η_{j_1 ... j_m} ) ∧ dx^{i_1} ∧ · · · ∧ dx^{i_k} ∧ dx^{j_1} ∧ · · · ∧ dx^{j_m}\\ =[(dω_{i_1 ...i_k} )η_{j_1 ... j_m} + ω_{i_1 ...i_k} dη_{j_1 ... j_m}] ∧ dx^{i_1} ∧ · · · ∧ dx^{i_k} ∧ dx^{j_1} ∧ · · · ∧ dx^{j_m}\\ =(dω_{i_1 ...i_k} ∧ dx^{i_1} ∧ · · · ∧ dx^{i_k} ) ∧ (η_{j_1 ... j_m} dx^{j_1} ∧ · · · ∧ dx^{j_m} )\\ +(−1)^k (ω_{i_1 ...i_k} dx^{i_1} ∧ · · · ∧ dx^{i_k} ) ∧ (dη_{j_1 ... j_m} ∧ dx^{j_1} ∧ · · · ∧ dx^{j_m}) \\ = dω ∧ η + (−1)^k ω ∧ dη.

We have proved (16.2).


Exterior derivative is nilpotent


ParseError: KaTeX parse error: Undefined control sequence: \label at position 38: …ta=d(d\eta)=0. \̲l̲a̲b̲e̲l̲{}\tag{16.3} \e…

Again, it is enough to consider forms η=ηi1...imdxi1dxim\eta= η_{i_1 ...i_m} ∧ dx^{i_1} ∧ · · · ∧ dx^{i_m} (no summation here). If ω=dηω = dη with ηΩm(M)η ∈ \Omega^m (M), we have ω=dηi1...imdxi1dxim=(xjηi1...im)dxjdxi1dxim.ω = dη_{i_1 ...i_m} ∧ dx^{i_1} ∧ · · · ∧ dx^{i_m} = \Big(\frac{\partial}{\partial x^j}η_{i_1 ...i_m}\Big)dx^j ∧ dx^{i_1} ∧ · · · ∧ dx^{i_m}.
Computing the exterior derivative of ω\omega we obtain dω=d(xjηi1...im)dxjdxi1dxim=(xpxjηi1...im)dxpdxjdxi1dxim.d\omega=d\Big(\frac{\partial}{\partial x^j}η_{i_1 ...i_m}\Big)dx^j ∧ dx^{i_1} ∧ · · · ∧ dx^{i_m}\\ =\Big(\frac{\partial}{\partial x^p}\frac{\partial}{\partial x^j}η_{i_1 ...i_m}\Big)dx^p\wedge dx^j ∧ dx^{i_1} ∧ · · · ∧ dx^{i_m}. In the last sum if p=jp = j, then dxpdxj=0,dx^p ∧ dx^j = 0, if pjp\not= j, then 2fxpxj\frac{∂^2 f }{ ∂ x^p ∂ x^j} is symmetric in pp and jj, but dxpdxjdx^p ∧ dx^j is alternating in pp and jj, so the terms with pjp \not= j pair up and cancel each other. For example 2η...x1x2dx1dx2+2η...x2x1dx2dx1=2η...x1x2dx1dx2+2η...x1x2(dx1dx2)=0.\frac{∂^2 \eta_{...} }{ ∂ x^1 ∂ x^2}dx^1\wedge dx^2 +\frac{∂^2 \eta_{...} }{ ∂ x^2 ∂ x^1}dx^2\wedge dx^1\\ =\frac{∂^2 \eta_{...} }{ ∂ x^1 ∂ x^2}dx^1\wedge dx^2+ \frac{∂^2 \eta_{...} }{ ∂ x^1 ∂ x^2}(-dx^1\wedge dx^2)=0.


Pullback and wedge product


ParseError: KaTeX parse error: Undefined control sequence: \label at position 51: … ω) ∧ (ψ^∗ η), \̲l̲a̲b̲e̲l̲{}\tag{16.4} \e…

for ωΩk(N), ηΩm(N)\omega\in\Omega^k(N),\ \eta\in\Omega^m(N) and a smooth map ψ:MN.\psi:M\to N.

In fact, we have

ψ(ωη)(v1,,vk+m)=ωη(dψ(v1),,dψ(vk+m))=(k+m)!k!m!Alt(ωη)(dψ(v1),,dψ(vk+m))=1k!m!σSk+msignσω(dψ(vσ(1),,dψ(vσ(k))η(dψ(vσ(k+1)),,dψ(vσ(k+m)))=1k!m!σSk+msignσψω(vσ(1),,vσ(k)ψη(vσ(k+1),,vσ(k+m))=(k+m)!k!m!Alt((ψω)(ψη))(v1,,vk+m)=(ψ(ω))(ψ(η))(v1,,vk+m).\psi^*(\omega\wedge\eta)(v_1,\ldots,v_{k+m})= \omega\wedge\eta(d\psi(v_1),\ldots,d\psi(v_{k+m}))\\ =\frac{(k+m)!}{k!m!}\mathrm{Alt}(\omega\otimes\eta)(d\psi(v_1),\ldots,d\psi(v_{k+m}))\\ =\frac{1}{k!m!}\sum_{\sigma\in S_{k+m}}\mathrm{sign}\,\sigma\, \omega(d\psi(v_{\sigma(1)},\ldots,d\psi(v_{\sigma(k)})\eta(d\psi(v_{\sigma(k+1)}),\ldots,d\psi(v_{\sigma(k+m)}))\\ =\frac{1}{k!m!}\sum_{\sigma\in S_{k+m}}\mathrm{sign}\,\sigma\, \psi^*\omega(v_{\sigma(1)},\ldots,v_{\sigma(k)}\psi^*\eta(v_{\sigma(k+1)},\ldots,v_{\sigma(k+m)})\\ =\frac{(k+m)!}{k!m!}\mathrm{Alt}((\psi^*\omega)\otimes(\psi^*\eta))(v_1,\ldots,v_{k+m})\\ =(\psi^*(\omega))\wedge(\psi^*(\eta))(v_1,\ldots,v_{k+m}).

We have checked (16.4).


Pullback and exterior derivative


Using the relation between the differential of a scalar function and the pullback (cf. (15.2)) one can check that for ωΩk(N)\omega\in\Omega^k(N) of the special form  ω=ωi1...ikdyi1dyik \ \omega=ω_{i_1 ...i_k}dy^{i_1}\wedge\ldots\wedge dy^{i_k}\ (no summation) and a smooth map ψ:MN\psi:M\to N

ψ(dω)=ψ(dωi1...ikdyi1...dyik)=ψ(dωi1...ik)ψ(dyi1)...ψ(dyik)=d(ψωi1...ik)d(ψyi1)d(ψyik)=d[(ψωi1...ik)d(ψyi1)d(ψyik)]=d[(ψωi1...ik)ψ(dyi1)ψ(dyik)]=d[ψ(ωi1...ikdyi1dyik)]=d(ψω).ψ^∗ (dω) = \psi^*(d\omega_{i_1...i_k}\wedge dy^{i_1}\wedge ...dy^{i_k})\\ =\psi^*(d\omega_{i_1...i_k})\wedge \psi^*(dy^{i_1})... \wedge\psi^*(dy^{i_k})\\ =d(ψ^∗ ω_{i_1 ...i_k} ) ∧ d(ψ^∗ y^{i_1} ) ∧ · · · ∧d(ψ^*y^{ i_k} )\\ = d [(ψ^∗ ω_{i_1 ...i_k} ) d(ψ^∗ y^{i_1} ) ∧ · · · ∧ d(ψ^∗ y^{i_k} )]\\ = d[ (ψ^∗ ω_{i_1 ...i_k} )ψ^∗ (dy^{i_1} ) ∧ · · · ∧ ψ^∗ (dy^{i_k} )]\\ = d [ψ^∗ (ω_{ i_1 ...i_k} dy^{i_1} ∧ · · · ∧ dy^{i_k} )] = d(ψ^∗ ω).

Due to linearity, we have proved ParseError: KaTeX parse error: Undefined control sequence: \label at position 81: …\Omega^k (N ). \̲l̲a̲b̲e̲l̲{}\tag{16.5} \e…


Example 16.3

Compute the pullback of  α=dxdy  \ \alpha=dx\wedge dy\ \ under the map Φ:Rr,ϕRx,y2,\Phi: R_{r,\phi}\to R^2_{x,y}, Φ(r,ϕ)=(rcosϕ,rsinϕ)\Phi(r,\phi)=(r\cos\phi,r\sin\phi).

%display latex M = Manifold(2, 'R^2') # manifold M c_xy.<x,y> = M.chart() # Cartesian coordinates on M N = Manifold(2, 'R^2p') # manifold N c_rp.<r,phi>=N.chart() # polar coordinates on N Phi = N.diff_map(M, (r*cos(phi), r*sin(phi)), name=r'\Phi') # N-> M alpha = M.diff_form(2,r'\alpha') # 2-form alpha on M alpha[0,1] = 1 # only one nonzero comp. of alpha alpha.disp() # show alpha

α=dxdy\displaystyle \alpha = \mathrm{d} x\wedge \mathrm{d} y

Pullback of α\alpha:

plb = Phi.pullback(alpha) # pullback of alpha plb.display() # show pullback

Φα=rdrdϕ\displaystyle {\Phi}^*\alpha = r \mathrm{d} r\wedge \mathrm{d} \phi

According to the remark after formula (15.6) one can check that if we replace  x  \ x\ by   rcosϕ  \ \ r\cos\phi\ \ and   y  \ \ y\ \ by   rsinϕ  \ \ r\sin\phi\ \ in dxdy  dx\wedge dy\ \ and compute the differentials (w.r.t (r,ϕ)(r,\phi)) of the obtained functions, then we get

d(rcosϕ)d(rsinϕ)=((rcosϕ)rdr+(rcosϕ)ϕdϕ)((rsinϕ)rdr+(rsinϕ)ϕdϕ)=(cosϕdrrsinϕdϕ)(sinϕdr+rcosϕdϕ)=rcos2ϕdrdϕrsin2ϕdϕdr=r(cos2ϕ+sin2ϕ)drdϕ=rdrdϕ.d(r\cos\phi)\wedge d(r\sin\phi)=(\frac{\partial (r\cos\phi)}{\partial r}dr+ \frac{\partial (r\cos\phi)}{\partial \phi}d\phi)\wedge (\frac{\partial (r\sin\phi)}{\partial r}dr+ \frac{\partial (r\sin\phi)}{\partial \phi}d\phi)\\ =(\cos\phi dr-r\sin\phi d\phi)\wedge (\sin\phi dr+r\cos\phi d\phi)=\\\\ r\cos^2\phi dr\wedge d\phi -r\sin^2\phi d\phi\wedge dr = r(\cos^2\phi+\sin^2\phi)dr\wedge d\phi =rdr\wedge d\phi.

Example 16.4

Compute the pullback of  α=dxdydz  \ \alpha=dx\wedge dy\wedge dz\ \ under the map Φ:Rr,ϕ,θ3Rx,y,z3\Phi: R^3_{r,\phi,\theta}\to R^3_{x,y,z},   Φ(r,ϕ,θ)=(rcosϕsinθ,rsinϕsinθ,rcosθ).\ \ \Phi(r,\phi,\theta)=(r\cos\phi\sin\theta,r\sin\phi\sin\theta,r\cos\theta).

%display latex M = Manifold(3, 'R^3') # manifold M=R^3 (Cart. coord.) c_xyz.<x,y,z> = M.chart() # Cartesian coordinates on M N = Manifold(3, 'R^3p') # manifold N=R^3 (spher.coord.) c_rpt.<r,theta,phi>=N.chart() # spherical coordinates on N Phi = N.diff_map(M, (r*cos(phi)*sin(theta), # Phi N -> M r*sin(phi)*sin(theta), r*cos(theta)),name=r'\Phi') alpha = M.diff_form(3,r'\alpha') # 3-form alpha on M alpha[0,1,2] = 1 # only one nonzero comp. of alpha alpha.disp() # show alpha

α=dxdydz\displaystyle \alpha = \mathrm{d} x\wedge \mathrm{d} y\wedge \mathrm{d} z

Pullback of α\alpha under Φ\Phi:

plb = Phi.pullback(alpha) # pullback of alpha plb.display() # show pullback

Φα=r2sin(θ)drdθdϕ\displaystyle {\Phi}^*\alpha = r^{2} \sin\left(\theta\right) \mathrm{d} r\wedge \mathrm{d} \theta\wedge \mathrm{d} \phi


Example 16.5

Compute Φα  \Phi^*\alpha\ \ for Φ:RR2,  Φ(t)=(cos(t),sin(t)) \Phi:R\to R^2,\ \ \Phi(t)=(\cos(t),\sin(t))\ and  α=yx2+y2dx+xx2+y2dy \ \alpha= \frac{-y}{x^2+y^2}dx+\frac{x}{x^2+y^2}dy.

M = Manifold(2, 'R^2') # manifold M= R^2 c_xy.<x,y> = M.chart() # Cartesian coordinates on M N = Manifold(1, 'R^1') # manifold N=R^1 c_t.<t> = N.chart() # coordinate t Phi = N.diff_map(M, (cos(t), sin(t)), name=r'\Phi') # Phi: N -> M alpha = M.diff_form(1,r'\alpha') # 1-form alpha on M alpha[:] = -y/(x^2+y^2), x/(x^2+y^2) # components of alpha alpha.disp() # show alpha

α=(yx2+y2)dx+(xx2+y2)dy\displaystyle \alpha = \left( -\frac{y}{x^{2} + y^{2}} \right) \mathrm{d} x + \left( \frac{x}{x^{2} + y^{2}} \right) \mathrm{d} y

Pullback  Φα  \ \Phi^*\alpha\ \

plb = Phi.pullback(alpha) # pullback Phi^*alpha plb.apply_map(factor) # factor all components plb.display() # show the result

Φα=dt\displaystyle {\Phi}^*\alpha = \mathrm{d} t


Example 16.6

Compute the pullback of   α=a0(x,y)dx+a1(x,y)dy  \ \ \alpha=a_0(x,y)dx+a_1(x,y)dy\ \ under the map  ψ:Ru,v2Rx,y2,\ \psi:R^2_{u,v}\to R^2_{x,y},  ψ(u,v)=(ψ1(u,v),ψ2(u,v)).\ \psi(u,v)=(\psi_1(u,v),\psi_2(u,v)).

%display latex M = Manifold(2, r'R^2_{uv}') # manifold M=R^2_uv c_uv.<u,v>=M.chart() # coordinates u,v N = Manifold(2, r'R^2_{xy}') # manifold N=R^2_xy c_xy.<x,y> = N.chart() # Cartesian coord. on N psi1 = M.scalar_field(function('psi1')(u,v), name=r'\psi1') # first comp. of psi psi2 = M.scalar_field(function('psi2')(u,v), name=r'\psi2') # second comp. of psi psi = M.diff_map(N,(psi1.expr(),psi2.expr()), name=r'\psi') # psi: M -> N al = N.diff_form(1,name=r'\alpha') # 1-form on N astr = ['a'+str(i) for i in range(2)] # names of components of al # component functions: af = [N.scalar_field(function(astr[i])(x,y), name=astr[i]) for i in range(2)] al[:] = af # define all components al.disp() # show al

α=a0(x,y)dx+a1(x,y)dy\displaystyle \alpha = a_{0}\left(x, y\right) \mathrm{d} x + a_{1}\left(x, y\right) \mathrm{d} y

Pullback   ψα\ \ \psi^*\alpha:

alplb = psi.pullback(al) # pullback of al alplb.disp() # show pullback

ψα=(a0(ψ1(u,v),ψ2(u,v))ψ1u+a1(ψ1(u,v),ψ2(u,v))ψ2u)du+(a0(ψ1(u,v),ψ2(u,v))ψ1v+a1(ψ1(u,v),ψ2(u,v))ψ2v)dv\displaystyle {\psi}^*\alpha = \left( a_{0}\left(\psi_{1}\left(u, v\right), \psi_{2}\left(u, v\right)\right) \frac{\partial\,\psi_{1}}{\partial u} + a_{1}\left(\psi_{1}\left(u, v\right), \psi_{2}\left(u, v\right)\right) \frac{\partial\,\psi_{2}}{\partial u} \right) \mathrm{d} u + \left( a_{0}\left(\psi_{1}\left(u, v\right), \psi_{2}\left(u, v\right)\right) \frac{\partial\,\psi_{1}}{\partial v} + a_{1}\left(\psi_{1}\left(u, v\right), \psi_{2}\left(u, v\right)\right) \frac{\partial\,\psi_{2}}{\partial v} \right) \mathrm{d} v


Example 16.7

For  ψ  \ \psi\ \ as above compute   ψ(dxdy)\ \ \psi^*(dx\wedge dy).

# continuation beta = N.diff_form(2, r'\beta') # 2-form beta on N beta[0,1] = 1 # only one nonzero component beta.disp() # show beta

β=dxdy\displaystyle \beta = \mathrm{d} x\wedge \mathrm{d} y

  ψ(dxdy)\ \ \psi^*(dx\wedge dy):

betaplb = psi.pullback(beta) # pullback psi^*beta betaplb.disp() # show pullback

ψβ=(ψ1vψ2u+ψ1uψ2v)dudv\displaystyle {\psi}^*\beta = \left( -\frac{\partial\,\psi_{1}}{\partial v} \frac{\partial\,\psi_{2}}{\partial u} + \frac{\partial\,\psi_{1}}{\partial u} \frac{\partial\,\psi_{2}}{\partial v} \right) \mathrm{d} u\wedge \mathrm{d} v

Note that the unique component of the obtained pullback is the determinant of the Jacobian matrix (ψ1uψ1vψ2uψ2v). \left(\begin{matrix} \frac{\partial \psi_1}{\partial u} & \frac{\partial \psi_1}{\partial v}\\ \frac{\partial \psi_2}{\partial u} & \frac{\partial \psi_2}{\partial v} \end{matrix} \right).


Example 16.8

For the map ψ:Ru,v,w3Rx,y,z3\psi:R^3_{u,v,w}\to R^3_{x,y,z}, defined by  ψ(u,v,w)=(ψ1(u,v,w),ψ2(u,v,w),ψ3(u,v,w))  \ \psi(u,v,w)=(\psi_1(u,v,w),\psi_2(u,v,w),\psi_3(u,v,w))\ \ compute  ψ(dxdydz).\ \psi^*(dx\wedge dy\wedge dz).

%display latex M = Manifold(3, r'R^3_{uvw}') # manifold M=R^3_uvw c_uvw.<u,v,w>=M.chart() # coordinates on M N = Manifold(3, r'R^3_{xyz}') # manifold N=R^3_xyz c_xy.<x,y,z> = N.chart() # Cartesian coord on N psi1 = M.scalar_field(function('psi1')(u,v,w), name=r'\psi1') # first component of psi psi2 = M.scalar_field(function('psi2')(u,v,w), name=r'\psi2') # second component of psi psi3 = M.scalar_field(function('psi3')(u,v,w), name=r'\psi3') # third component of psi psi = M.diff_map(N,(psi1.expr(),psi2.expr(),psi3.expr()) ,name=r'\psi') # psi: M->N beta = N.diff_form(3,r'\beta') # 3-form beta on N beta[0,1,2] = 1 # only one nonzero component of beta beta.disp() # show beta

β=dxdydz\displaystyle \beta = \mathrm{d} x\wedge \mathrm{d} y\wedge \mathrm{d} z

betaplb=psi.pullback(beta) # pullback psi*beta betaplb.disp() # show pullback

ψβ=((ψ1wψ2vψ1vψ2w)ψ3u+(ψ1wψ2uψ1uψ2w)ψ3v(ψ1vψ2uψ1uψ2v)ψ3w)dudvdw\displaystyle {\psi}^*\beta = \left( -{\left(\frac{\partial\,\psi_{1}}{\partial w} \frac{\partial\,\psi_{2}}{\partial v} - \frac{\partial\,\psi_{1}}{\partial v} \frac{\partial\,\psi_{2}}{\partial w}\right)} \frac{\partial\,\psi_{3}}{\partial u} + {\left(\frac{\partial\,\psi_{1}}{\partial w} \frac{\partial\,\psi_{2}}{\partial u} - \frac{\partial\,\psi_{1}}{\partial u} \frac{\partial\,\psi_{2}}{\partial w}\right)} \frac{\partial\,\psi_{3}}{\partial v} - {\left(\frac{\partial\,\psi_{1}}{\partial v} \frac{\partial\,\psi_{2}}{\partial u} - \frac{\partial\,\psi_{1}}{\partial u} \frac{\partial\,\psi_{2}}{\partial v}\right)} \frac{\partial\,\psi_{3}}{\partial w} \right) \mathrm{d} u\wedge \mathrm{d} v\wedge \mathrm{d} w

The unique component of the pullback is the Laplace expansion of the determinant of the Jacobian matrix (ψ1uψ1vψ1wψ2uψ2vψ2wψ3uψ3vψ3w). \left(\begin{matrix} \frac{\partial \psi_1}{\partial u} & \frac{\partial \psi_1}{\partial v} & \frac{\partial \psi_1}{\partial w} \\ \frac{\partial \psi_2}{\partial u} & \frac{\partial \psi_2}{\partial v} & \frac{\partial \psi_2}{\partial w} \\ \frac{\partial \psi_3}{\partial u} & \frac{\partial \psi_3}{\partial v} & \frac{\partial \psi_3}{\partial w} \end{matrix} \right).


Global formula for exterior differentials of 1-forms


For smooth differential 1-form  α \ \alpha\ and smooth vector fields  v,w \ v,w\ on the manifold MM we have

dα(v,w)=vα(w)wα(v)α([v,w]).\begin{equation} dα(v, w) = v\,α(w) − w\,α(v) − α ([v, w]). \tag{16.6} \end{equation}

Both sides of this equation are linear in the sense that if α=fidxi\alpha =\sum f_idx^i, then

d(fidxi)(v,w)=d(fidxi)(v,w),v[(fidxi)(w)]=v[fidxi(w)],w[(fidxi)(v)]=w[fidxi(v)],(fidxi)([v,w])=(fidxi)([v,w]),d(\sum f_idx^i)(v,w)=\sum d(f_idx^i)(v,w),\\ v[(\sum f_idx^i)(w)]=\sum v[f_idx^i(w)],\\ w[(\sum f_idx^i)(v)]=\sum w[f_idx^i(v)],\\ (\sum f_idx^i)([v,w])=\sum(f_idx^i)([v,w]),

therefore we only need to prove the equation for a single term fdxif dx^i.

For the left hand side of (16.6) we obtain

dα(v,w)=d(fdxi)(v,w)=(dfdxi)(v,w)=df(v)dxi(w)df(w)dxi(v)=v(f)w(xi)w(f)v(xi).dα(v, w) = d(f dx^i)(v, w) = (df ∧ dx^i )(v, w)\\ = df (v)dx^i(w) − df (w)dx^i(v) = v(f)\,w(x^i) − w(f)\,v(x^i).

For the first term on the right hand side we have

vα(w)=v(fdxi)(w)=v(fdxi(w))=v(fw(xi))=v(f)w(xi)+fv(w(xi)),v\,α(w) = v (f dx^i) (w) = v (f dx^i(w))\\ = v (f · w(x^i)) = v(f)w(x^i) + f\,v(w(x^i)),

and similarly

wα(v)=w(f)v(xi)+fw(v(xi)).w\,α(v) = w(f)v(x^i) + f\, w(v(x^i)).

Since [v,w]=vwwv[v, w] = vw − wv

α([v,w])=(fdxi)([v,w])=f[v,w](xi)=f(vwwv)(xi)=fv(w(xi))fw(v(xi)).α ([v, w]) = (f dx^i) ([v, w]) = f · [v, w](x^i)\\ = f ·( vw − wv)(x^i) = f\, v(w(x^i)) − f \,w(v(x^i)).

Combining the obtained equalities we have

vα(w)wα(v)α([v,w])=v(f)w(xi)+fv(w(xi)w(f)v(xi)fw(v(xi))fv(w(xi))+fw(v(xi))=v(f)w(xi)w(f)v(xi)=dα(v,w).vα(w) − wα(v) − α ([v, w])\\ = v(f)w(x^i) + f\,v(w(x^i)\\ − w(f)v(x^i) -f\, w(v(x^i))\\ − f\, v(w(x^i)) + f \,w(v(x^i))\\ = v(f)w(x^i) − w(f)v(x^i) = dα(v, w).

Example 16.9

Check (16.6) on selected α,v,w\alpha, v, w

%display latex dim=2 # dimension of manifold N N = Manifold(dim, 'N') # manifold N X = N.chart(' '.join(['x'+str(i)+':x^{'+str(i)+'}' for i in range(dim)])) # chart on N x0, x1 = X[:] # coordinates x^0, x^1 of chart X as the Python variables x0, x1 al = N.diff_form(1, name=r'\alpha') # 1-form alpha def astr(i): return 'a_'+str(i) # names of components af = [N.scalar_field(function(astr(i))(x0, x1), name=astr(i)) for i in range(dim)] # component functions al[:] = af # define all components v = N.vector_field(x0, x1) # vector field v w = N.vector_field(x1, x0) # vector field w L = al.exterior_derivative()(v, w) # Left hand side of (16.6) R = v(al(w)) - w(al(v)) - al(v.bracket(w)) # Right hand side of (16.6) L == R # check (16.6)

True\displaystyle \mathrm{True}

What's next?

Take a look at the notebook One-parameter groups of transformations.