maplechap13.docx

上传人:b****6 文档编号:4336297 上传时间:2022-11-29 格式:DOCX 页数:23 大小:351.53KB
下载 相关 举报
maplechap13.docx_第1页
第1页 / 共23页
maplechap13.docx_第2页
第2页 / 共23页
maplechap13.docx_第3页
第3页 / 共23页
maplechap13.docx_第4页
第4页 / 共23页
maplechap13.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

maplechap13.docx

《maplechap13.docx》由会员分享,可在线阅读,更多相关《maplechap13.docx(23页珍藏版)》请在冰豆网上搜索。

maplechap13.docx

maplechap13

张量分析

自从爱因斯坦1915年发表著名的广义相对论以来,张量分析一直在理论物理领域起着无可替代的重要作用。

而张量分析在物理学中的应用,又反过来推动着张量分析本身的发展。

近几十年来,张量分析更是被广泛地应用到力学和数学的各个方面。

介于张量分析的广泛应用,Maple中也加入了张量分析软件包tensor,本章将就这个软件包,介绍应用Maple解决张量分析问题或者辅助张量分析研究的方法。

13.1张量数据类型

13.1.1张量数据类型及其建立

Maple中的张量分析软件包tensor中包含张量运算的各种常用函数,它们所使用的数据类型也是一个专门的类型——tensor_type。

从一般意义的复合数据类型上讲,tensor_type是一个映射表,它包含有两个域,其一是分量域——compts,用来存储张量的各个分量;其二是指标域——index_char,用来指明对应的指标是协变指标(covariantindex)或是逆变指标(contravariantindex)。

举例来说,一个n阶张量,它的分量域必须是一个n维数组,而且必须是一个“方”的数组,就是说数组的每一维的分量个数必须相同。

实际上,数组每一维的分量个数就是该张量所在空间的维数。

而它的指标域则必须是一个长度为n的一维数组,数组中的元素不是1就是–1。

如果第i个位置上是1,就表示张量的第i个指标是逆变指标;反之,则为协变指标。

例如,一个4阶张量的指标域是[-1,1,1,-1],这就表示张量的第2个和第3个指标是逆变指标(写成上指标),而第1个和第4个指标是协变指标(写成下指标)。

特别地,对于0阶张量,也就是标量,指标域是一个空数组[],相应的分量域就是不是一个数组而仅仅是一个代数表达式了。

上面介绍的是张量数据类型的构成,在Maple中,建立一个张量对象需要调用tensor工具包中的函数create,它的第一个参数是表明指标类型的数组,第二个参数就是张量分量的数组。

作为例子,我们用create函数生成一个理论物理中的Schwarzschild协变度量张量。

它是一个二阶张量,首先载入tensor工具包:

再定义它的分量组成的矩阵。

由于它是个对角阵,大部分元素是0,我们用稀疏的对称阵来简化输入(array的参数symmetric,sparse)。

接下来,用create生成该张量,同时指定指标标的类型,协变度量张量的分量都是逆变分量,所以需要输入[-1,-1]。

由于Maple不自动对矩阵求值,所以需要注意用eval或evalm使其求值。

和其他数据类型一样,tensor_type也可以用type来检验其类型:

0阶张量,也就是标量,也可以用create生成。

这时,我们用空数组作为第一个参数,标量表达式作为第二个参数:

13.1.2度量张量的输入

度量张量是最常用的张量了,张量的各种微分运算都需要用到度量张量。

由于度量张量也是张量,所以自然也可以用create来生成。

不过在编写交互式程序中,如果需要用户输入度量张量,这是很不方便的。

在tensor工具包中还提供了交互式输入度量张量的子程序entermatric。

利用它,只需要给出各个指标的线元系数表达式,就可以得到相应坐标系下的度量张量。

函数entermatric由两个参数,第一个用于输出度量张量,第二个用于输出坐标符号。

由于都是作为输出参数,两个参数都需要是未被赋值的变量(对于已赋值变量,可以用单引号扩起来)。

作为例子,我们用它来输入柱坐标的度量张量:

系统出现提示,等待用户输入空间的维数:

接下来输入的是各个坐标的变量符号(因为要用在输入线元系数表达式中)。

然后系统提示用户,度量张量的矩阵是否为对角阵。

由于柱坐标是正交坐标系,所以度量张量的矩阵是对角阵。

最后,需要输入的是线元的系数:

至此,柱坐标度量张量的协变分量就输入完成了。

同时,我们还得到了坐标符号。

13.2张量的代数运算

13.2.1张量的比较

我们称两个张量相等,当且仅当它们在同一个坐标系中的协变(或逆变、混变)分量一一相等。

在Maple中,可以利用tensor工具包中的函数compare比较两个张量。

不过,由于张量在Maple中是以分量的形式存放的,所以compare不能比较两个不同类型的张量(比如同一张量的混变分量和逆变分量,将视为不同)。

对于两个张量对象,Maple首先比较它们的阶数,维数,和指标类型,如果都相同,再对各个分量进行比较。

如果各个分量都相同,将返回Identical;否则,则返回不同的分量的指标;如果张量分量的矩阵采用的是不同的指标函数,则返回indexfunc。

函数compare在比较时会调用张量化简函数simp,所以,对于特殊的张量,最好重载函数simp。

对于化简后相同的张量,也将返回Indentical。

我们通过例子来说明它的使用。

首先比较一个分量由单位矩阵组成的三维空间的二阶张量和他本身:

不出我们的意料,返回的是相等——Identical。

然后,再将它和一个四维空间的二阶张量比较:

返回的是维数不匹配——Dimesionsunmatched。

13.2.2升降指标

在前一小节中,我们已经知道,不同指标类型的张量是不能比较的。

但是,利用tensor工具包中的函数raise和lower,可以分别完成张量分量的升、降指标。

它们的调用方法是这样的:

raise(contravariant_metric_tensor,A,i1,i2,...)

lower(covariant_metric_tensor,A,i1,i2,...)

其中,contravariant_metric_tensor是逆变分量形式的度量张量,而covariant_metric_tensor是协变分量形式的度量张量;A是有待升/降指标的张量;i1,i2,……是所需升/降的指标,在raise中,它们对应的A中的指标必须是协变指标,而lower中则必须是逆变指标。

例如,对于下面的混变分量张量T:

我们利用前一节中输入的柱坐标下的协变形式的度量张量g对其降指标:

这样,就得到了该张量的协变分量形式。

但是,如果需要升指标,就必须用到逆变形式的度量张量。

对于二阶张量,可以用求逆的方式从度量张量的协变分量求得其逆变分量,tensor工具包中的invert函数,可以完成二阶张量的逆的运算:

函数invert在求得二阶张量的逆的同时,还求得了张量的行列式值,通过第二个参数返回:

利用逆变形式的度量张量,就可以进行升指标的运算了:

13.2.3张量的线性组合

我们把同阶张量的数乘和加减运算称为线性组合(linearcombination),利用tensor工具包中的函数lin_com可以完成这一类运算。

和张量的比较一样,由于Maple中用分量方式存储张量,所以,参加运算的每一个张量必须事先化成相同的指标类型。

该函数的调用形式是这样的:

lin_com(c1,T1,c2,T2,....,cN,TN)

其中,c1,c2,……是代数表达式;T1,T2,……是张量对象,它代表这样的运算:

这个函数的参数数量不限,可以进行任意多个张量的线性组合。

函数中的代数表达式参数c1,c2,……可以省略,默认情况下,认为它们是1。

作为例子,我们用它来进行下面几个张量的运算。

为了输入的简洁,我们直接用table构筑张量数据对象,而不采用create函数生成:

下面用lin_com函数求这三个张量的线性组合:

由于第二个张量的系数是1,所以将其省略。

13.2.4张量的内积、外积和缩并

在Maple的张量分析工具包中,张量的内、外积(innerandouterproduct)都可以用一个函数——prod来完成。

它的调用格式是这样的:

prod(A,B,[a1,b1],[a2,b2],...)

其中,A、B是有待作内/外积的张量对象;[ai,bi]表示相乘后需要缩并的指标对,ai是A的指标,bi是B的指标。

而且,对应的指标必须是不同类型的才可以缩并。

作为例子,我们求两个一阶张量,也就是矢量的内积:

得到的结果是一个0阶张量,也就是标量,它的指标域是空数组:

在张量的阶数范围内,缩并的指标对可以有任意多,也可以没有,没有时就表示两个张量的外积(并乘)。

对于单个张量,也可以进行缩并运算,所用的函数是contract。

它的调用格式和prod基本相同,区别在于只有一个张量对象。

例如,我们也可以通过对于上面两个矢量的外积再进行缩并的手段得到它们的内积:

13.2.5张量的转置

如果保持基矢量的顺序不变,调换张量的指标顺序,得到的新张量,称为原张量的转置张量。

在Maple中,通过tensor工具包中的函数permute_indices可以求得张量的转置张量。

该函数的调用格式如下:

permute_indices(T,permutation)

这里,T是原张量;permutation是一个有序表,有序表的长度等于T的阶数,它表示转置的方式,第i个元素的值表示转置后张量的第i个指标在原来张量中的位置。

例如对于一个三阶张量,如果调用该函数是第二个参数为[3,1,2],则表示原张量的第3个指标转置后成为新张量的第一个指标,第1个指标转置后称为第2个,原来的第2个则成为第3个。

我们通过一个简单的例子来说明它的用法。

为了使转置过程更清楚,我们将分量的位置在分量中予以体现:

需要注意的是,张量的转置并不仅仅是分量矩阵的转置,同时,它的指标类型也相应的改变了。

13.2.6张量的对称化和反对称化

利用tensor工具包中的函数symmetrize和antisymmetrize可以分别对张量在指定的指标上进行对称化和反对称化。

它们有以下的调用格式:

symmetrize(T,[i1,i2,...])

antisymmetrize(T,[i1,i2,...])

其中,T是原张量,[i1,i2,...]是进行对称化/反对称化的指标。

需要注意的是,对称化和反对称化只能对具有相同类型的指标进行,不同类型指标的分量对称化,是没有意义的,在Maple中也是不允许的。

举例来说,对于三阶张量T,如果给定的是混变指标形式[-1,1,-1],那么调用symmetrize(T,[1,3])就是对其分量进行如下的运算:

同样,反对称化anitsymmetrize(T,[1,3])表示这样的运算:

我们用一个对称二阶张量的例子来说明它们的用法:

由于它本身已经是对称张量,所以反对称化的结果将是0张量:

13.3张量场函数的导数

13.3.1张量分量对坐标的偏导数

张量分量对坐标的偏导数,也就是一般导数,可以用tensor工具包中的partial_diff函数求得。

函数的调用格式如下:

partial_diff(U,coord)

其中,U是有待求导的张量,coord是坐标符号组成的有序表。

它返回的是一个比U高一阶的张量数据类型,有这样的指标类型:

[U[index_char],-1]。

但是,我们知道,在一般的曲线坐标系中,张量分量的偏导数并不是张量分量。

由于Maple中的张量数据类型是以分量形式存储的,所以在表示上也可以表示非张量的分量,又如在下一接踵将要介绍的Christoffel符号。

不过,在使用时需要将它们加以区别,不可以对它们在进行一些必须是张量分量才可以进行的运算。

这里通过一个简单的例子来说明它的用法,我们用它来求一个矢量分量对坐标的偏导数。

首先生成一个1阶张量:

然后,定义坐标符号,再对U求偏导数:

对于度量张量的偏导数,可以调用函数d1matric和d2matric直接求得它对坐标的一阶和二阶偏导数。

这两个函数的调用格式是这样的:

d1metric(g,coord)

d2metric(D1g,coord)

其中,g是协变分量表示的度量张量,也就是具有指标类型[-1,-1]的度量张量;D1g是度量张量的一阶偏导,具有[-1,-1,-1]的指标类型,可以用d1metric所得的结果作为这个参数;coord是坐标符号组成的有序表。

还需要注意的是,g的分量矩阵必须具有对称的指标函数(生成时用symmetric参数,或者用entermetric生成)。

作为例子,我们用d1metric来求球坐标中度量张量的一阶偏导。

首先定义球坐标中的度量张量:

然后调用d1metric求它的一阶偏导,并给定坐标符号:

……

……

13.3.2Christoffel符号

在张量分析中,Christoffel符号是如下定义的。

把协变及时量对坐标的偏导数分别对逆变和协变基矢量分解:

其中的系数

成为第一类Christoffel符号,

称为第二类Christoffel符号。

我们知道Christoffel符号可以通过度量张量的导数求得。

在Maple的tensor工具包中的函数Christoffel1和Chrstoffel2可以分别求得这两类Christoffel符号:

Christoffel1(D1g)

Christoffel2(ginv,Cf1)

其中,D1g是度量张量对坐标的一阶偏导,可以用函数d1metric求得(参见12.3.1);ginv是逆变分量表示的度量张量;Cf1是第一类Christoffel符号。

两个函数返回的都是三阶张量数据类型,但实际上它们并不是张量分量。

它们的返回值,我们不妨用Cf1和Cf2表示,分别与指标记号下的Christoffel符号有以下的对应关系:

Cf1[compts][i,j,k]=

;Cf2[compts][i,j,k]=

接着前一小节中的例子,用它们来求球坐标系的两类Christoffel符号。

首先利用12.3.1中的度量张量一阶偏导求第一类Christoffel符号:

然后用求逆函数invert求出逆变分量表示的度量张量,并利用它求第二类Christoffel符号:

由于Christoffel符号往往大部分分量为0,直接显示过于繁琐,不利于察看。

可以利用tensor中的displayGR工具显示它们的非0分量:

函数displayGR是用来显示广义相对论中常用张量信息的工具,它有这样的调用格式:

displayGR(GR_name,object)

其中GR_name是和广义相对论有关的对象名称,参见表12.1;object是需要显示的对象。

表13.1displayGR所能显示的对象

名称

对象

coordinates

坐标符号

cov_metric

协变分量形式的度量张量

contra_metric

逆变分量形式的度量张量

detmetric

度量张量的行列式

Christoffel1

第一类Christoffel符号

Christoffel2

第二类Christoffel符号

Riemann

Riemann张量(曲率张量)

Ricci

Ricci张量(缩并的曲率张量)

Ricciscalar

Ricci标量

Einstein

Einstein张量

Weyl

Weyl张量

13.3.3张量分量对坐标的协变导数

张量场函数对坐标的导数在各基矢量上的分量称为张量分量的协变导数。

例如,三阶张量T对坐标的导数可以对一组混变基矢量分解为:

其中的系数

就是对应分量的协变导数

在Maple中,可以用tensor工具包中的函数cov_diff完成这一复杂的运算。

它具有以下的调用格式:

cov_diff(U,coord,Cf2)

其中,U是一个任意阶的张量,coord是坐标符号,Cf2是第二类Christoffel符号。

它的结果是一个比U高一阶的张量,对应的指标类型是[U[index_char],-1]。

作为例子,我们用上一小节中得到的球坐标中的第二类Christoffel符号,求一个矢量F的协变分量对坐标的协变导数。

13.3.4标量场的方向导数

所谓方向导数,就是标量场的梯度在给定方向上的投影。

利用tensor工具包中的directional_diff函数,可以求得标量场的方向导数。

它具有以下的调用格式:

directional_diff(f,V,coord)

其中,f是一个代数表达式,表示有待求导的标量场;V是逆变分量形式的一阶张量,用来表示方向矢量场;coord是坐标符号。

它的返回值是一个代数表达式。

我们通过一个例子来简单地说明它的使用方法:

13.3.5Riemann-Christoffel张量

从张量分析中,我们知道,欧氏空间和Riemann空间的区别在于空间的Riemann-Christoffel张量(曲率张量)是否为0。

用tensor工具包中的函数Riemann,可以求得空间的Riemann-Christoffel张量。

它的调用格式是这样的:

Riemann(ginv,D2g,Cf1)

其中,ginv是用逆变分量表示的度量张量;D2g是度量张量对坐标的二阶偏导数,Cf1是第一类Christoffel符号。

作为例子,我们用Maple求球面二维空间中的Riemann-Christoffel张量。

首先建立球面坐标的度量张量:

然后,求出逆变分量表示的度量张量,度量张量的一阶、二阶导数,第一类Christoffel符号,进而求出Riemann-Christoffel张量:

Riemann-Christoffel张量也可以用displayGR显示其非零分量:

球面的Riemann-Christoffel张量有非0分量,由此可知,球面空间不是欧氏空间。

我们还可以由此求得球面的高斯曲率K:

高斯曲率非0,所以球面不是一个可展曲面——不能由平面弯曲得到。

13.4坐标变换

采用张量方法研究物理问题的一大优势是,物理现象的描述和坐标系的选取没有关系。

对于复杂的物理问题,可以先在简单地坐标系中描述,进而利用张量的坐标变换关系,推广到任意的坐标系中去。

这一节中将介绍Maple的张量工具包中的两个坐标变换工具——Jacobian和transform。

13.4.1坐标变换的Jacobi矩阵

利用tensor工具包中的函数Jacobian,可以求得给定变换的Jacobi转换矩阵以及Jacobi矩阵的逆。

它的调用形式是这样的:

Jacobian(Y,Finv,yJx,xJy)

其中,Y是新坐标系的坐标符号组成的有序表;Finv是一组变换关系组成的有序表,元素个数须与Y相等,表中每个元素是一个等式,写成“老坐标=新坐标的表达式”的形式;yJx,xJy用于输出(须为未赋值的变量),分别是从新坐标到老坐标和从老坐标到新坐标的Jacobi变换矩阵,为了便于计算,它们也被定义为张量数据类型,分别具有指标类型[1,-1]和[-1,1](同样,它们也不是张量分量)。

作为例子,我们求一个从笛卡尔坐标系向极坐标系转换的Jacobi矩阵。

首先,指定坐标符号,和坐标变换关系的表达式:

然后,就可以求它们的Jacobi变换矩阵了:

13.4.2张量的坐标变换

有了坐标变换的Jacobi矩阵,就可以对张量分量进行坐标变换了。

只需调用tensor包中的函数transform就可以了,它的调用格式如下:

transform(Tx,Finv,yJx,xJy)

其中,Tx是老坐标中的张量;其余的参数意义和Jacobian中的相同。

不同的是,这里yJx和xJy都是作为输入参数的。

通过一个例子来说明它的使用。

这里,就利用上一小节中得到的笛卡尔系到极坐标系的Jacobi矩阵来求度量张量在极坐标下的分量形式。

笛卡尔坐标系中,度量张量的矩阵是一个单位阵:

通过坐标变换,就得到了度量张量在极坐标系中的分量形式(虽然这也许并不是个求度量张量的好方法)。

13.5张量对象的信息

13.5.1张量信息的获取

Maple的tensor工具包中有一组函数可以获取具有张量数据类型的对象的信息。

它们并不是必要的,因为tensor_type的各个域都可以直接用[]获得。

在编写程序时,它们可能会显得根方便。

由于它们都比较简单,这里只将它们列在下面,而不加以具体举例说明。

✧get_compts(A)获取张量对象A的分量域

✧get_char(A)获取张量对象A的指标类型域

✧get_rank(A)获取张量对象的阶数

13.5.2张量的指标函数

在介绍数组类型和线性代数时,我们已经接触过指标函数了,利用它们,可以生成一些特殊的矩阵。

在tensor工具包中,也含有一些特殊的指标函数,利用它们,可以生成有一定规律的矩阵和数组,进而生成特殊的张量。

这里将它们所对应的特征列成下表:

表13.2张量的指标函数

函数名

对应的特征

用途

cf1

三个指标中的前两个对称

用于第一类Christoffel符号

cf2

三个指标中的后两个对称

用于第二类Christoffel符号

cov_riemann

满足对称关系:

用于Riemann-Christoffel张量和Weyl张量的协变分量形式

d2met

四个指标中的前两个、后两个分别对称

用于度量张量协变分量对坐标的二阶偏导数

skew23

三个指标中的后两个偏斜对称

用于connexF中的结构系数

下面通过一个简单的例子来说明使用这些指标函数所能达到的效果。

首先定义一个以cov_riemann作为指标函数的四维数组,并对它的一个元素赋值:

可以看到,其他具有相应的对称性的元素也跟着变了:

灵活地利用这些指标函数,对于这些具有特殊对称性的张量来说,可以减少很多输入工作。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 初中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1