Designing idea
矢量类型
矢量类型:
-
符号型矢量
vecsym[name_,label_]
-
指标型矢量
vec[vecsym_,index_]
-
分量型矢量
veccomp[vecsym_,dim_]
对于特定的矢量,例如动量,可定义:
Code
p[label_]:=
vecsym[p,label];
p[io_IO]:=
signIO[io]*vecsym[p,labelIO[io]];
p[label_,index_]:=
vec[p[label],index];
veccomp[vecsym[p,label_],dim_]:=
...
此种方案的优势:
-
无需管理符号型矢量的实例;
-
模式匹配简单;
-
可扩展性强。
张量表达式
符号型矢量
-
符号型矢量表达式:
-
符号型矢量的线性组合
-
被封装在
_vec|_dot|_dotcomp
等指标或分量型矢量后,可由vectorReplace
等函数访问
-
-
节点:
-
_Plus|_Times
- 常规节点 -
vecsym[name_,label_]
- 符号型矢量节点
-
指标型张量
-
指标型张量表达式:
-
张量的线性组合
-
用指标表示张量积与缩并
-
-
节点:
-
_Plus|_Times
- 常规节点 -
指标型张量节点:
-
原子化,内部不可直接访问
-
vec[vecsym_,index_]
- 指标型矢量,封装了符号型矢量表达式vecsym
与指标index
-
dot[vecsym1_,vecsym2_]
- 矢量点积,封装了两个符号型矢量表达式 -
met[index1_,index2_]
- 度规张量
-
-
分量型张量
-
分量型张量表达式
-
节点:
-
_Plus|_Times
- 常规节点 -
分量型张量节点:
-
依赖于维数与度规号差等常数
-
veccomp[vecsym_,dim_]
- 分量型矢量,封装了符号型矢量表达式vecsym
-
dotcomp[vecsym1_,vecsym2_,dim_]
- 矢量点积分量,封装了两个符号型矢量表达式 -
metcomp[dim_,signature_]
- 度规分量
-
-
函数
scalarFreeze|scalarFocus
- 用以处理下述问题:对于形如表达式((a+b)^2*_vec+_vec)*_vec
,仅展开乘积而保持标量系数(a+b)^2
不变,或仅对标量系数进行特定操作。