mathematica实现非对易代数计算
问题描述
这个问题来源于同学一次偶然的提问。一般的符号计算推导会涉及非对易代数,尤其在理论物理中,对易关系是物理系统非常重要的代数结构,在理论物理很多领域都有广泛的应用。不过很多情况下,心算手推可以直接获得简单的对易子的结果,而在实际应用的理论中,复杂的对易子关系就不那么容易看出或者手动计算十分繁琐,所以就有必要利用符号计算软件强大的功能实现这个过程,解放理论学者的双手。当然,功能繁多的mathematica集成了非对易代数的计算模块,实现的格式如下
1 |
|
可以看出不那么简洁,而且有些功能需要重新定义,学习成本很高。所以这里介绍一款mathematica开源插件,彻底解决mathematica非对易计算的痛点。(btw Maple有更为成熟的解决方案,这方面mathematica要逊色一些,这里不多赘述)
解决方案
这款插件叫NCAlgebra,它是基于mathematica的非对易模块开发的,省去了原有mathematica模块非对易代数语言的学习成本和rewheel的过程。
插件获得与安装
插件可以在github上直接下载,地址是https://github.com/NCAlgebra/NC。插件作者早在2017年就完成了基本的开发,稳定版5.0可以直接在页面上下载,当然也可以直接clone作者当前的仓库。下载完解压之后会在根目录中看到一个“InstallNCAlgebra.nb”文件,直接用mathematica打开,按照英文指示安装即可。这个note文件实质上隐藏了安装命令。
插件作者十分细心给出了安装指导,他在note文件中反复强调了最重要的步骤:把一开始解压的包含note文件的根文件夹名更改为NC,以便插件集成过程中在mathematica的环境配置。
插件的使用:计算对易子
下面介绍插件关于计算对易子的使用
这里以计算
为例。
其中基本的对易关系是
调用插件,导入NC模块以及非对易模块:
1 |
|
定义基本对易关系:
1 |
|
和mathematica非对易语法一样,定义对易表达式:
1 |
|
然后便可以通过NC的模块算符操作
1 |
|
不过由于替换函数(在mathematica中是表达式后/.{x->y})过于傻瓜,只能替换形式一致的符号,所以往往一次替换并不能给出最简单的结果,所以有网友在stackexchange上提出了一个解决方案1——就是多替换几次。利用上面的关系式循环嵌套若干次直到最后形式收敛即可。或者按照该网友的方法,定义替换函数,重复调用即可:
1 |
|
最后输出的结果是
1 |
|
这里需要注意的是,NC的算符识别对有特殊下标的符号不是很友好,所以这里把$R_-$换成了$R_m$,其他同理。
参考
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!