物理课上常用矢量分析知识,其中有些公式的推导有些繁琐。从微分几何的角度来看,大学物理中考虑的都是三维欧氏空间中的问题。所以,我们要讨论的就是三维欧氏空间中的矢量分析问题。本文就从微分几何的角度,结合程序来推导常用的几个矢量分析公式。
本文需要用到我的另两篇文章的程序和技巧:
- 广义相对论极简张量计算程序
- 广义相对论计算中张量计算技巧
附:本文的代码链接
一般坐标系
xx={u1, u2, u3};
g={{g11, g12, g13}, {g21, g22, g23}, {g31, g32, g33}};
作为最一般的坐标系,gij
均为(u1, u2, u3)
的函数。
梯度
标量场
D[f[u1, u2, u3], {xx}]
散度
某矢量场
A = {A1, A2, A3}
其中Ai
均为(u1, u2, u3)
的函数。
此时散度的定义为
而协变导数作用于
所以,用程序来计算的表达式为,
chr = ChristoffelSymbol1[g,xx]; (* 克氏符 *)
ig = Inverse[g]; (* 度规的逆 *)
daab = Transpose[D[A,{xx}] + chr.A];
Tr[daab]
旋度
旋度的定义为
因为体元
其中
所以,用程序来计算的表达式为,
chr = ChristoffelSymbol1[g,xx]; (* 克氏符 *)
ig = Inverse[g]; (* 度规的逆 *)
daab = ig.Transpose[D[A,{xx}] + chr.A];
levi = LeviCivitaTensor[3]; (* Levi Civita 张量 *)
Flatten[Sqrt[g] levi,{{2,3}}].Flatten[daab]
二阶标量导数
二阶标量导数的定义为
二阶标量导数可以作用于任意张量,而作用到不同类型的张量会有不同的表达式。此处我们将用作用于标量为例作为展示,即
xx = {u1, u2, u3};
chr = ChristoffelSymbol1[g,xx]; (* 克氏符 *)
ig = Inverse[g]; (* 度规的逆 *)
df = D[f @@ xx, {xx}];
ddf = Transpose[D[df,{xx}] - df.chr];
Tr[ig.ddf]
一般的正交坐标系
正交坐标系是指在该坐标系下度规的分量只有对角元非零。设坐标系为
用微分几何的语言来说,就是它的度规分量为,
有些教科书上将
拉梅系数
,并可以给出相应的矢量算符作用的公式,
梯度
梯度的表达式为
而
所以计算可以写作,
xx = {u1, u2, u3};
g = DiagonalMatrix[{h1 @@ xx, h2 @@ xx, h3 @@ xx}^2];
ig = Inverse[g];
Simplify[Sqrt[ig].D[f @@ xx, {xx}],
Assumptions -> {h1 @@ xx > 0, h2 @@ xx > 0, h3 @@ xx > 0}]
其中,Sqrt[ig]
作用的原因是要变换到正交归一基底下的分量。后面的简化条件为h1,h2,h3
均大于零。
输出的结果为,
可以验证它的结果和教科书上的
一致。
散度
教科书上的公式中的
xx = {u1, u2, u3};
g = DiagonalMatrix[{h1 @@ xx, h2 @@ xx, h3 @@ xx}^2];
ig = Inverse[g];
A = {A1 @@ xx, A2 @@ xx, A3 @@ xx};
AA = DiagonalMatrix[1/{h1 @@ xx, h2 @@ xx, h3 @@ xx}].A;
chr = ChristoffelSymbol[g, xx];
D[AA, {xx}] + chr.AA // Tr
输出的结果为,
一致。
旋度
xx = {u1, u2, u3};
g = DiagonalMatrix[{h1 @@ xx, h2 @@ xx, h3 @@ xx}^2];
ig = Inverse[g];
chr = ChristoffelSymbol1[g, xx];
A = {A1 @@ xx, A2 @@ xx, A3 @@ xx};
daab = Transpose[D[AA, {xx}] + chr.AA];
levi = LeviCivitaTensor[3];(*Levi Civita 张量*)
Simplify[
Sqrt[g].ig.Flatten[
Sqrt[Det[g]] levi, {{1}, {2, 3}}
].Flatten[ig.daab],
Assumptions -> {h1 @@ xx > 0, h2 @@ xx > 0, h3 @@ xx > 0}
] // Expand
其中,最后一步ig
的作用是将对偶矢量拉升为矢量。而Sqrt[g]
作用的原因是要变换到正交归一基底下的分量。
输出的结果为,
可以验证它的结果和教科书上的
一致。
二阶标量导数
xx = {u1, u2, u3};
chr = ChristoffelSymbol1[g, xx];(*克氏符*)
ig = Inverse[g];(*度规的逆*)
df = D[f @@ xx, {xx}];
ddf = D[df, {xx}] - df.chr;
Tr[ig.ddf] // Expand
输出的结果为,
可以验证它的结果和教科书上的
一致。
常用坐标系的应用
知道了正交坐标系下的表达式后,正角坐标系、球坐标系、柱坐标系等常用的坐标系下的矢量分析表达式就可以直接用公式求解。此处不详述。