tensor
frame
compute the contravariant frame components which reduce given metric components to a diagonal matrix of positive and negative ones.
Calling Sequence
Parameters
Description
Examples
frame(g, hinv, const_g, coords, params, coord_vals, param_vals)
g
-
metric in the natural basis
hinv
output: "contravariant" frame
const_g
output: constant metric in the new basis
coords
list of coordinate variable names
params
(optional) list of parameter variable names
coord_vals
(optional) list of numbers to evaluate coordinates at a point
param_vals
(optional) list of numbers to evaluate parameters with
Important: The tensor package has been deprecated. Use the superseding packages DifferentialGeometry and Physics instead.
The function frame(g, hinv, const_g, coords, params, coord_vals, param_vals) computes the frame hinv which reduces the metric g to a diagonal metric of positive and negative ones (const_g is congruent to g with const_g = h*g*h-transpose). It uses the lists of numbers coord_vals and param_vals to evaluate the variables listed in coords and params in determining the signs of matrix entries while performing the reduction. The return value of the procedure is NULL. It is important to note that frame is not uniquely determined by the metric, and hence this routine computes only one such frame.
g must be a symmetric covariant tensor_type of rank 2 -- the component array of g must use the symmetric indexing function.
The parameters hinv and const_g must be unassigned names. The "contravariant" frame (tensor_type with character [-1,1]) is assigned to hinv and the diagonal constant metric (tensor_type with character [-1,-1]) is assigned to const_g.
coords is the list of coordinate variables of which the components of g are functions. params is the list of names which are parameters in the metric components. Note that the size of the list coords must match the dimension of the metric tensor. If there are no parameters involved, then the params argument may be left out.
In the last stage of reducing the metric to the final form, the metric has been reduced to a metric with non-constant diagonal entries and zeroes everywhere else. The last step is to divide each diagonal entry by the square root of its absolute value once for columns and once for rows (the rows of the frame components are divided by this factor only once) so that each diagonal is reduced to a positive or negative one. Because the metric components are functions of the coordinate variables and contain parameters, it is not in general possible to determine the sign of the non-constant diagonal entries. However, if the metric component functions are known, then given the names of the coordinates and parameters, and a set of values to evaluate these with, it is possible to determine the sign of these components in a neighborhood of a point (the metric component functions are assumed to be continuous, of course). Thus, you can specify what values to use for the coordinate and parameter variables when this evaluation takes place using the optional parameters coord_vals and param_vals. The number of values given in coord_vals must match the number of variables given in coords, and similarly for params and param_vals. If these last two options are left out, the default value of 1 will be used for each parameter and coordinate variable in the evaluations. For example if you pass the lists x,y,z, m,q, 2,3,2, 3,4 for these parameters, then the substitutions x=2, y=3, z=2, m=3, q=4 are made when attempting to determine the signs of the nonconstant diagonal entries. In the cases where the procedure is still unable to determine the signs of these entries (for example, if the metric components are unknown functions of the coordinates, or if you do not specify enough information in the coordinate and parameter lists), then the result is written in terms of the inert forms of the function abs().
If you wish to specify any of the optional evaluation variables (that is, coord_vals and param_vals), then you must specify all seven of the arguments. That is, the fifth parameter is always taken to be the parameter list, the sixth to be the list of coordinate values, and the seventh to be the list of parameter values. If there are no parameters and you would like to specify evaluation constants for the coordinate variables, then an empty list should be passed for the parameters (fifth argument) and the parameter evaluation constants (seventh argument).
Simplification: This routine uses the `tensor/lin_com/simp` routine for simplification purposes. The simplification routine is applied to each component of result after it is computed. By default, `tensor/lin_com/simp` is initialized to the `tensor/simp` routine. It is recommended that the `tensor/lin_com/simp` routine be customized to suit the needs of the particular problem. It should be noted that some expressions involving square roots may not come out as simplified as you would like. Once the routine has computed a frame, you are free to modify the frame so that it is simpler but still able to transform the metric to a constant metric.
This command is part of the tensor package, so it can be used in the form frame(..) only after executing the command with(tensor). However, it can always be accessed through the long from of the command by using tensor[frame](..).
with⁡tensor:
Determine the frame which reduces the Schwarzschild metric to a constant metric:
coord≔t,r,θ,φ:
g_compts≔array⁡symmetric,sparse,1..4,1..4:
g_compts1,1≔1−2⁢mr:g_compts2,2≔−1g_compts1,1:
g_compts3,3≔−r2:g_compts4,4≔−r2⁢sin⁡θ2:
g≔create⁡−1,−1,eval⁡g_compts
g≔table⁡compts=1−2⁢mr0000−11−2⁢mr0000−r20000−r2⁢sin⁡θ2,index_char=−1,−1
The metric involves trig functions, modify `tensor/lin_com/simp`:
`tensor/lin_com/simp`:= proc (x) local y; y:=simplify(x); eval(subs( cos(theta)^2 = 1 - sin(theta)^2, y)); end proc;
tensor/lin_com/simp ≔ procxlocaly;y ≔ simplify⁡x;eval⁡subs⁡cos⁡θ^2=1 − sin⁡θ^2,yend proc
Also, use the frame to carry out a change of basis, make sure that tensor[change_basis] returns things in a simplest form possible. Note that tensor[change_basis] uses `tensor/raise/simp` for simplification (see the help page tensor[simp] for a full list of simplifier routine names).
`tensor/raise/simp` := proc(a) simplify(a) end proc;
tensor/raise/simp ≔ procasimplify⁡aend proc
Now find a frame (note that you are making any required evaluations at the point [t,r,theta,phi] = [3,3,3,3] with a value of 1 for `m' (that is, outside the Schwarzschild radius):
frame⁡g,hinv,const_g,coord,m,10,10,10,10,1
eval⁡hinv
table⁡compts=1−−r+2⁢mr00001−r−r+2⁢m0000csgn⁡rr00001r2⁢sin⁡θ2,index_char=−1,1
eval⁡const_g
table⁡compts=10000−10000−10000−1,index_char=−1,−1
Note that you can replace the [3,3] and [4,4] components of the computed hinv with something a little simpler:
hinvcompts3,3≔1r:
hinvcompts4,4≔1r⁢sin⁡θ:
table⁡compts=1−−r+2⁢mr00001−r−r+2⁢m00001r00001r⁢sin⁡θ,index_char=−1,1
Does this hinv still transform g to const_g?
h≔invert⁡hinv,det_h:
change_basis⁡g,h,hinv
Now suppose a change to the more general spherically-symmetric geometry
gcompts1,1≔f1⁡r:gcompts2,2≔−f2⁡r:
frame⁡g,hinv,const_g,coord,m,3,3,3,3,1
Even though you gave values for all of the variables, there is no way to determine the signs of the entries since the functions f1 and f2 are not known:
table⁡compts=1f1⁡r00001f2⁡r0000csgn⁡rr00001r2⁢sin⁡θ2,index_char=−1,1
table⁡compts=f1⁡rf1⁡r0000−f2⁡rf2⁡r0000−10000−1,index_char=−1,−1
This is the best you can do without knowing more about f1 and f2. However, the computed result does give us an indication of a simpler form to use:
hinvcompts≔array⁡1..4,1..4,sparse,1,1=1f1⁡r12,2,2=1f2⁡r12,3,3=1r,4,4=1r⁢sin⁡θ
hinvcompts≔1f1⁡r00001f2⁡r00001r00001r⁢sin⁡θ
See Also
abs
tensor(deprecated)
tensor(deprecated)/change_basis
tensor(deprecated)[connexF]
tensor(deprecated)[simp]
Download Help Document