转载自http://mathworld.wolfram.com/MetricTensor.html


Roughly speaking, the metric tensor g_(ij) is a function which tells how to compute the distance between any two points in a given space. Its components can be viewed as multiplication factors which must be placed in front of the differential displacements dx_i in a generalized Pythagorean theorem:

 ds^2=g_(11)dx_1^2+g_(12)dx_1dx_2+g_(22)dx_2^2+....
(1)

In Euclidean space, g_(ij)=delta_(ij) where delta is the Kronecker delta (which is 0 for i!=j and 1 for i=j), reproducing the usual form of the Pythagorean theorem

 ds^2=dx_1^2+dx_2^2+....
(2)

In this way, the metric tensor can be thought of as a tool by which geometrical characteristics of a space can be “arithmetized” by way of introducing a sort of generalized coordinate system (Borisenko and Tarapov 1979).

In the above simplification, the space in question is most often a smooth manifold M, whereby a metric tensor is essentially a geometrical object g=g(·,·) taking two vector inputs and calculating either the squared length g(v,v) of a single vector v or a scalar product g(u,v) of two different vectors u!=v (Misner et al. 1978). In this analogy, the inputs in question are most commonly tangent vectors lying in the tangent space T_pM for some pointp in M, a fact which facilitates the more common definition of metric tensor as an assignment of differentiable inner products to the collection of all tangent spaces of a differentiable manifold M (O’Neill 1967). For this reason, some literature defines a metric tensor on a differentiable manifold M to be nothing more than a symmetric non-degenerate bilinear form (Dodson and Poston 1991).

An equivalent definition can be stated using the language of tensor fields and indices thereon. Along these lines, some literature defines a metric tensor to be a symmetric (0,2) tensor field g on a smooth manifold M so that, for all x in M, gx is non-degenerate and index(gx)=I for some nonnegative integer I (Sachs and Wu 1977). Here, Iis called the index of g and the expression index(·) refers to the index of the respective quadratic form. This definition seems to occur less commonly than those stated above.

Metric tensors have a number of synonyms across the literature. In particular, metric tensors are sometimes called fundamental tensors (Fleisch 2012) or geometric structures (O’Neill 1967). Manifolds endowed with metric tensors are sometimes called geometric manifolds (O’Neill 1967), while a pair (X,G) consisting of a real vector space Xand a metric tensor G:X×X->R is called a metric vector space (Dodson and Poston 1991). Symbolically, metric tensors are most often denoted by g or g_(ij), although the notations ds^2 (O’Neill 1967), g^->^-> (Fleisch 2012), and G(Dodson and Poston 1991) are also sometimes used.

When defined as a differentiable inner product of every tangent space of a differentiable manifold M, the inner product associated to a metric tensor is most often assumed to be symmetric, non-degenerate, and bilinear, i.e., it is most often assumed to take two vectors v,w as arguments and to produce a real number <v,w> such that

 <kv,w>=k<v,w>=<v,kw>
(3)
 <v+w,x>=<v,x>+<w,x>
(4)
 <v,w+x>=<v,w>+<v,x>
(5)
 <v,w>=<w,v>.
(6)

Note, however, that the inner product need not be positive definite, i.e., the condition

 <v,v>>=0
(7)

with equality if and only if v=0 need not always be satisfied. When the metric tensor is positive definite, it is called a Riemannian metric or, more precisely, a weak Riemannian metric; otherwise, it is called non-Riemannian, (weak) pseudo-Riemannian, or semi-Riemannian, though the latter two terms are sometimes used differently in different contexts. The simplest example of a Riemannian metric is the Euclidean metric ds^2=dx_1^2+dx_2^2+... discussed above; the simplest example of a non-Riemannian metric is the Minkowski metric of special relativity, the four-dimensional version of the more general metric of signature (1,n-1) which induces the standard Lorentzian Inner Product on n-dimensional Lorentzian space. In some literature, the condition of non-degeneracy is varied to include either weak or strong non-degeneracy (Marsden et al. 2002); one may also consider metric tensors whose associated quadratic forms fail to be symmetric, though this is far less common.

In coordinate notation (with respect to a chosen basis), the metric tensor g_(alphabeta) and its inverse g^(alphabeta) satisfy a number of fundamental identities, e.g.

 g^(alphabeta)=e^->^alpha·e^->^beta,
(8)
 g_(alphabeta)=e^->_alpha·e^->_beta,
(9)

and

 g_(munu)=(partialxi^alpha)/(partialx^mu)(partialxi^beta)/(partialx^nu)eta_(alphabeta),
(10)

where eta_(alphabeta) is the matrix of metric coefficients. One example of identity (0) comes from special relativity where eta_(alphabeta) is the matrix of metric coefficients for the Minkowski metric of signature (1,3), i.e.

 eta_(alphabeta)=[-1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1].
(11)

Generally speaking, identities (3), (2), and (1) can be succinctly written as

 g=D^(T)etaD,
(12)

where

D_(alphamu) = (partialxi^alpha)/(partialx^mu)
(13)
D_(alphamu)^(T) = D_(mualpha).
(14)

What’s more,

 partial/(partialx^m)g_(il)g^(lk)=partial/(partialx^m)delta_i^k
(15)

gives

 g_(il)(partialg^(lk))/(partialx^m)=-g^(lk)(partialg_(il))/(partialx^m)
(16)

and hence yields a quantitative relationship between a metric tensor and its inverse.

In the event that the metric is positive definite, the metric discriminants are positive. For a metric in two-space, this fact can be expressed quantitatively by the inequality

 g=g_(11)g_(22)-g_(12)^2>0.
(17)

The orthogonality of contravariant and covariant metrics stipulated by

 g_(ik)g^(ij)=delta_k^j
(18)

for i=1,2,3,...,n gives n linear equations relating the 2n quantities g_(ij) and g^(ij). Therefore, if n metrics are known, the others can be determined, a fact summarized by saying that the existence of metric tensors gives a geometrical way of changing from contravariant tensors to covariant ones and vice versa (Dodson and Poston 1991).

In two-space,

g^(11) = (g_(22))/g
(19)
g^(12) = g^(21)=-(g_(12))/g
(20)
g^(22) = (g_(11))/g.
(21)

Therefore, if g is symmetric,

g_(alphabeta) = g_(betaalpha)
(22)
g^(alphabeta) = g^(betaalpha).
(23)

In any symmetric space (e.g., in Euclidean space),

 g_alpha^beta=g^beta_alpha=delta_alpha^beta,
(24)

and so

 g_(alphaalpha)=1/(g^(alphaalpha)).
(25)

The angle phi between two parametric curves is given by

 cosphi=r_1^^·r_2^^=(r_1)/(g_1)·(r_2)/(g_2)=(g_(12))/(g_1g_2),
(26)

so

 sinphi=(sqrt(g))/(g_1g_2)
(27)

and

 |r_1xr_2|=g_1g_2sinphi=sqrt(g).
(28)

In arbitrary (finite) dimension, the line element can be written

 ds^2=dx_idx_i=g_(ij)dq_idq_j
(29)

where Einstein summation has been used. In three dimensions, this yields

 dx_i=(partialx_i)/(partialq_1)dq_1+(partialx_i)/(partialq_2)dq_2+(partialx_i)/(partialq_3)dq_3=(partialx_i)/(partialq_j)dq_j,
(30)

and so it follows that the metric tensor g_(ij) in three-space can be written as

 g_(ij)=sum_(k)(partialx_k)/(partialq_i)(partialx_k)/(partialq_j).
(31)

Moreover, because g_(ij)=0 for i!=j when working with respect to orthogonal coordinate systems, the line elementfor three-space becomes

ds^2 = g_(11)dq_1^2+g_(22)dq_2^2+g_(33)dq_3^2
(32)
= (h_1dq_1)^2+(h_2dq_2)^2+(h_3dq_3)^2,
(33)

where h_i=sqrt(g_(ii)) are called the scale factors. Many of these notions can be generalized to higher dimensions and to more general contexts.

张量计算比较繁琐,尤其是广义相对论和黎曼几何结合起来的计算更是冗繁。好在现在已经出现了很多计算张量的工具包。吴老师使用Maple的 GRTenser 计算,我打算看看针对 Mathematica 的 EDC and RGTC。

EDC and RGTC,即 Riemannian Geometry & Tensor Calculus @ Mathematica,链接:http://www.inp.demokritos.gr/~sbonano/RGTC/

Download RGTC (Version 3.8.9 – May 2013)

  • Download all files – compressed: .sit format (100 KB), .zip format (135 KB)
  • Uncompressed files (~1000 KB):  RGTC.nb  —  OperatorPLT.nb  —  NPsymbolPLT.nb  —  EDCRGTCcode.m. (Only the combined matrixEDC and RGTC code in package format is included — it must be placed in an appropriate directory).
  • Note: RGTC cannot be used for calculations with abstract tensors (manipulation of tensor expressions with abstract indices). It only operates on explicit tensors (nested lists of components which are functions of the coordinates). For abstract calculations try the package xTensor.

Additional Examples can be found here.

英文版维基百科的介绍如下(来自 Tensor software https://en.wikipedia.org/wiki/Tensor_software),红色字体是和广义相对论计算有关的工具,我专门标注了出来。


Standalone software

  • SPLATT[1] is an open source software package for high-performance sparse tensor factorization. SPLATT ships a stand-alone executable, C/C++ library, and Octave/MATLABAPI.
  • Cadabra[2] is a computer algebra system (CAS) designed specifically for the solution of problems encountered in field theory. It has extensive functionality for tensor polynomial simplification including multi-term symmetries, fermions and anti-commuting variables, Clifford algebras and Fierz transformations, implicit coordinate dependence, multiple index types and many more. The input format is a subset of TeX. Both a command-line and a graphical interface are available.
  • Tela[3] is a software package similar to Matlab and (GNU) Octave, but designed specifically for tensors.

Software for use with Mathematica

  • Tensor[4] is a tensor package written for the Mathematica system. It provides many functions relevant for General Relativity calculations in general Riemann-Cartan geometries.
  • Ricci[5] is a system for Mathematica 2.x and later for doing basic tensor analysis, available for free.
  • TTC[6] Tools of Tensor Calculus is a Mathematica package for doing tensor and exterior calculus on differentiable manifolds.
  • EDC and RGTC,[7] “Exterior Differential Calculus” and “Riemannian Geometry & Tensor Calculus,” are free Mathematica packages for tensor calculus especially designed but not only for general relativity.
  • Tensorial[8] “Tensorial 4.0” is a general purpose tensor calculus package for Mathematica.
  • xAct:[9] Efficient Tensor Computer Algebra for Mathematica. xAct is a collection of packages for fast manipulation of tensor expressions.
  • GREAT[10] is a free package for Mathematica that computes the Christoffel connection and the basic tensors of General Relativity from a given metric tensor.
  • Atlas 2 for Mathematica[11] is a powerful Mathematica toolbox which allows to do a wide range of modern differential geometry calculations
  • GRTensorM[12] is a computer algebra package for performing calculations in the general area of differential geometry.
  • MathGR[13] is a package to manipulate tensor and GR calculations with either abstract or explicit indices, simplify tensors with permutational symmetries, decompose tensors from abstract indices to partially or completely explicit indices and convert partial derivatives into total derivatives.
  • TensoriaCalc[14] is a tensor calculus package written for Mathematica 9 and higher, aimed at providing user-friendly functionality and a smooth consistency with the Mathematica language itself. As of January 2015, given a metric and the coordinates used, TensoriaCalc can compute Christoffel symbols, the Riemann curvature tensor, and Ricci tensor/scalar; it allows for user-defined tensors and is able to perform basic operations such as taking the covariant derivatives of tensors. TensoriaCalc is continuously under development due to time constraints faced by its inventor/developer.

Software for use with Maple

  • GRTensorII[15] is a computer algebra package for performing calculations in the general area of differential geometry.
  • Atlas 2 for Maple[16] is a modern differential geometry for Maple.
  • DifferentialGeometry[17] is a package which performs fundamental operations of calculus on manifolds, differential geometry, tensor calculus, General Relativity, Lie algebras, Lie groups, transformation groups, jet spaces, and the variational calculus. It is included with Maple.

Software for use with Matlab

Software for use with Maxima

Maxima[23] is a free open source general purpose computer algebra system which includes several packages for tensor algebra calculations in its core distribution. It is particularly useful for calculations with abstract tensors, i.e., when one wishes to do calculations without defining all components of the tensor explicitly. It comes with three tensor packages:[24]

  • itensor for abstract (indicial) tensor manipulation,
  • ctensor for component-defined tensors, and
  • atensor for algebraic tensor manipulation.

Software for use with R

  • Tensor[25] is an R package for basic tensor operations.
  • rTensor[26] provides several tensor decomposition approaches.
  • tensorBF[27] is an R package for Bayesian Tensor decomposition.
  • MTF[28] Bayesian Multi-Tensor Factorization for data fusion and Bayesian versions of Tensor PCA and Tensor CCA. Software: MTF

Libraries

  • Redberry[29] is an open source computer algebra system designed for symbolic tensor manipulation. Redberry provides common tools for expression manipulation, generalized on tensorial objects, as well as tensor-specific features: indices symmetries, LaTeX-style input, natural dummy indices handling, multiple index types etc. The HEP package includes tools for Feynman diagrams calculation: Dirac and SU(N) algebra, Levi-Civita simplifications, tools for calculation of one-loop counterterms etc. Redberry is written in Java and provides extensive Groovy-based programming language.
  • libxm[30] is a lightweight distributed-parallel tensor library written in C.
  • FTensor[31] is a high performance tensor library written in C++.
  • TL[32] is a multi-threaded tensor library implemented in C++ used in Dynare++. The library allows for folded/unfolded, dense/sparse tensor representations, general ranks (symmetries). The library implements Faa Di Bruno formula and is adaptive to available memory. Dynare++ is a standalone package solving higher order Taylor approximations to equilibria of non-linear stochastic models with rational expectations.
  • vmmlib[33] is a C++ linear algebra library that supports 3-way tensors, emphasizing computation and manipulation of several tensor decompositions.
  • Spartns[34] is a Sparse Tensor framework for Common Lisp.
  • FAstMat[35] is a thread-safe general tensor algebra library written in C++ and specially designed for FEM/FVM/BEM/FDM element/edge wise computations.
  • Cyclops Tensor Framework [36] is a distributed memory library for efficient decomposition of tensors of arbitrary type and parallel MPI+OpenMP execution of tensor contractions/functions.
  • TiledArray[37] is a scalable, block-sparse tensor library that is designed to aid in rapid composition of high-performance algebraic tensor equation. It is designed to scale from a single multicore computer to a massively-parallel, distributed-memory system.
  • libtensor [38] is a set of performance linear tensor algebra routines for large tensors found in post-Hartree-Fock methods in quantum chemistry.
  • ITensor [39] features automatic contraction of matching tensor indices. It is written in C++ and has higher-level features for quantum physics algorithms based on tensor networks.
  • Fastor [40] is a high performance C++ tensor algebra library that supports tensors of any arbitrary dimensions and all their possible contraction and permutation thereof. It employs compile-time graph search optimisations to find the optimal contraction sequence between arbitrary number of tensors in a network. It has high level domain specific features for solving nonlinear multiphysics problem using FEM.
  • Xerus [41] is a C++ tensor algebra library for tensors of arbitrary dimensions and tensor decomposition into general tensor networks (focusing on matrix product states). It offers Einstein notation like syntax and optimizes the contraction order of any network of tensors at runtime so that dimensions need not be fixed at compile-time.

我对广义相对论的很多计算并不是很清楚,基本上也没怎么计算过度规、张量、四维电磁势等等东西,只是在现成的度规下开始做黑洞解,然后算一些温度、熵,深一些就做一些泰勒展开,或者用一下留数定理等,对张量的完整计算并不熟悉。

吴老师使用Maple的GRTenser张量包来计算黑洞相关的解,效果非常好,只可惜我没用过Maple,也不是很懂这个软件。对于Mathematica用的稍微多一点的我,在网上找到了一些书,这些书基本上是外文图书,但是内容都很不错。突然感叹,外国人虽少,但对某一点是真专注,再小众也有人做的非常深非常好,佩服。

这是在亚马逊搜索到的图书:查看链接

我下载了几本电子书,感觉还可以,放到这里可以下载:

MATHEMATICA全书(第4版).pdf
Mathmatica for theoretical physics I.pdf
Mathmatica for theoretical physics II.pdf

今天碰到一个问题,问题如下:

假设在2020年,销售额是15000元,预期到2030年销售额是20000元,如果每年以相同的增长率增长,请问该增长率是多少?

这是求增长率的问题。方程很好列,2020年到2030年,刚好10年,每年增长率相等,则方程可以列为:

    \[ 15000 (1+x)^{10}=20000 \]

输入格式:

15000*(1+x)^10=20000

这是个一元十次方程。接下来就是求解方程了。

问题是,10次方程似乎并不好解,借用Mathematica的Solve函数也不能直接求解,直接用Solve函数求解会得到如下结果:

可以看到用Solve函数得不到我们要的数值解,所以Solve并不能解高次方程。

我尝试过,用Solve求解4次和4次以下方程才可以直接得到结果,幂次再高的话就不能得到简单的数值解。因此得换个思路:

利用 FindRoot 而不是 Solve 来求解。

借用Mathematica可以按照如下方式求解(我已经做了注释):

可以得到增长率约为 2.92%

由此可以看到,借用函数图像的交叉点判断数值解的范围,再利用FindRoot来求得近似解,这种方法很快,也很高效。

类似的,可以换数值来求解负的增长率,比如下题:

假设在2020年,超污染排放厂是35个,预期到2030年降低到22个,如果每年以相同的递减率递减,请问该递减率是多少?

用类似的方法计算如下(这里没加注释,仿照上例来看,方法一模一样):

可以求得递减率约是 4.54%

对于其他次幂,该方法也是可用的。