SamplePublisher`GrassmannCalculus`
PullbackForms |
|
| | ||||
Details and Options
Examples
(1)
Basic Examples
(1)
In[1]:=
<<GrassmannCalculus`
Establish routines to set and coordinate systems.
{x,y}
{u,v}
In[2]:=
setXYCoordinates:=
[2,{x,y},"Form"]setUVCoordinates:=
[2,{u,v},"Form"]
SetCoordinateVectorSpace |
SetCoordinateVectorSpace |
Write a function to map points from space to space and immediately obtain the pullback rules for the coordinates.
{x,y}
{u,v}
{u,v}
In[3]:=
F:={x,y}{xy,x+y}uvPullback=Thread[{u,v}F[x,y]]
Out[3]=
{uxy,vx+y}
We can pull back a function i.e., 0-form, simply using .
{u,v}
uvPullback
In[4]:=
u+u/.uvPullback
2
v
Out[4]=
xy+xy
2
(x+y)
For an expression involving basis forms we need .
PullbackForms
In[5]:=
uvdu+dv%//
[setUVCoordinates,setXYCoordinates,uvPullback]
PullbackForms |
Out[5]=
dv+duuv
Out[5]=
dy(1+y(x+y))+dx(1+x(x+y))
2
x
2
y
The mapping does not have to be a diffeomorphism. We do not have to invert it. This is one of the beauties of forms. For example, could be a mapping from .
F
F
2
In[6]:=
setTCoordinates:=
[1,{t},"Form"]setUVCoordinates:=
[2,{u,v},"Form"]F:=t{Cos[t],Sin[t]}tPullback=Thread[{u,v}F[t]]
SetCoordinateVectorSpace |
SetCoordinateVectorSpace |
Out[6]=
{uCos[t],vSin[t]}
In[7]:=
uvdu+dv%//
[setUVCoordinates,setTCoordinates,tPullback]
PullbackForms |
Out[7]=
dv+duuv
Out[7]=
dt
3
Cos[t]
The algorithm works as follows:
1) Convert the basis vectors to exterior derivatives of the coordinates.
2) Pull back all the coordinate symbols.
3) Switch to the ToCoordinates and evaluate the exterior derivatives.
1) Convert the basis vectors to exterior derivatives of the coordinates.
2) Pull back all the coordinate symbols.
3) Switch to the ToCoordinates and evaluate the exterior derivatives.
In[8]:=
setUVCoordinatesuvdu+dv%/.{du
%//Simplify
d
[u],dvd
[v]}%/.tPullbacksetTCoordinates%%//EvaluateExteriorDerivatives |
Out[8]=
dv+duuv
Out[8]=
uvd[u]+d[v]
Out[8]=
d[Sin[t]]+Cos[t]d[Cos[t]]Sin[t]
Out[8]=
dt(Cos[t]-Cos[t])
2
Sin[t]
Out[8]=
dt
3
Cos[t]
I you are working with a fixed map between fixed coordinate systems you can define a shortened version of .
PullbackForms
In[9]:=
Pull=expr
[setUVCoordinates,setTCoordinates,tPullback][expr];
PullbackForms |
In[10]:=
Pull[uvdu+dv]Pull[3Sin[u]vdu]Pull[u+]
2
v
Out[10]=
dt
3
Cos[t]
Out[10]=
-3dtSin[Cos[t]]
2
Sin[t]
Out[10]=
Cos[t]+
2
Sin[t]
|
|
""

