首页/文章/ 详情

Wolfram Mathematica张量运算个人总结

1年前浏览12346


应师弟邀请,结合自己日常科研经验,总结下关于张量运算的编程方法。(由于Mathematica 支持符号转义,个人编程时候习惯用转义变量,再粘贴成文本时候会有乱码,因此部分文本采用截图的形式讲解,见谅)

目前大家比较常用的数学类编程软件主要有:Mathematica,Maple,Matlab,其中Matlab偏向数值运算,前两个偏向符号运算及公式推导。张量,作为力学和物理学中比较常用的数学工具,在描述材料性能(例如弹性张量),物理场空间分布(例如应变场,应力场)具有重要的应用。平时推导张量运算,一般都是手动将4阶弹性张量转化为Voigt格式,进而做矩阵运算。如果直接用Matlab按照4阶张量运算,在处理高维矩阵的时候,常常需要用到reshape() 函数调整运算数组结构,非常容易出错。

Voligt 格式弹性张量

这里用Mathematica中表的概念,将高阶张量转化为表,可以直接进行点乘,并矢,梯度,散度,旋度(力学一般用不上旋度,电磁学可能偏多些)的运算。

1、什么是表?

Mathematica里并没有矩阵的概念,取而代之的是用表(Table)代替矩阵运算。可以用Excel中的行,列,页来理解,第一层是Excel页中的元素,第二层是Excel行中的元素,第三层是列中的元素,等等乃至更高阶数。事实上,Mathematica并没有规定必须是填满,每行,列页元素不相同也可以。

Table构造张量与Excel类别

E.g. Table构造3阶张量和非满阵张量

借助Table,我们可以构造任意维度的张量,例如构造4阶弹性张量Cijkl

四阶弹性张量

2、张量的常见运算

我们知道,张量的运算实际上就是相同角标爱因斯坦求和,不同角标并矢

即,相同角标Sum运算,不同角标Table运算

第一个Sum函数的意思是作 爱因斯坦求和,第二个Table是将剩余的角标并矢成高阶张量的形式,实际使用的时候一般二者结合使用。

对于梯度和散度运算,有内置的函数

内置的梯度和散度函数

实际上,内置的函数计算结果是右梯度和右散度,考虑到力学中大部分张量都是对称的,左右梯度实际上无差别,但为了严谨,需要将对应的角标置换下,这里就不过多展开,直接给出计算模块。

左右梯度和散度计算模块

那么对于更为复杂的计算,例如

可以直接套用上述模块

E.g. 复杂张量运算实现,这里正好计算出来是2阶张量,方便显示采用矩阵格式(//MatrixForm)

3、结语

上面介绍了张量的并矢,点积,梯度,散度,并没有介绍叉乘和旋度,原因是力学计算中除了自旋角动量和轨道角动量相关的运算,这两个符号的运算并不常见,思路是一样的,利用叉乘的张量公式结合利威尔-奇维塔张量运算。

 

希望对各位日常推导公式带来帮助。

感谢阅读。


来源:芷行说
材料MathematicaMaple
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2023-09-12
最近编辑:1年前
芷行说
本科 | 固体力学博士... 芷行说,致力精品,专注于有限元...
获赞 29粉丝 30文章 39课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈