二维经典晶格模型的TRG方法
Tensor Renormalization Group Approach to Two-Dimensional Classical Lattice Models
DOI:PRL 99, 120601 (2007)
1.介绍
这种方法在本质上与块自旋方法( block spin methods)相似,但同时建立在量子纠缠理论的基础上。在这个意义上,该技术可以看作是DMRG方法的经典类比。
密度矩阵重正化群(DMRG)技术在一维量子系统的分析中被证明是非常强大的。因此,我们尝试在高维空间发展类似的重整化群方法,这种方法可以解决许多目前难以解决的问题(如2D Hubbard模型)。虽然经典的实空间重整化群方法(如块自旋方法)已经存在多年,但它们从来没有达到DMRG的通一性和精确性。
在二维的情况下,利用量子信息论的思想,提出了一种数值重整化群方法,该方法可以有效地求解任意二维经典晶格模型。我们将这种技术称为张量重整化群方法(TRG)——没有sign problem,并且同样适用于具有复杂权重的模型。
该方法的优点是,它是一个完全各向同性的粗粒化过程,在思想上类似于块自旋方法。因此,它也适合于研究宇宙远距离物理。在理论层面上,这种方法也揭示了经典RG与量子纠缠的关系。
TRG适合在张量网络模型中运用,许多著名的统计力学模型,如Ising模型、Potts模型和六顶点模型,都可以很自然地写成张量网络模型,即所有具有局部相互作用的经典格模型都可以写成张量网络模型
2.具体算法
2.1Tensor network models
我们现在来描述蜂巢晶格上的张量网络模型,首先指定一个(循环对称)张量TijkT_{ijk}Tijk(i,j,k=1,...,Di ,j,k= 1,...,Di,j,k=1,...,D),相应的张量网络在蜂窝晶格的每个键上的自由度为iii(i=1,...,Di = 1,...,Di=1,...,D)
(i,j,k,...i ,j,k,...i,j,k,...)的权重为:e−S(i,j,k,...)=TijkTilmTjnpTkqr....e^{-S(i ,j,k,...)} = T_{ijk}T_{ilm}T_{jnp}T_{kqr}....e−S(i,j,k,...)=TijkTilmTjnpTkqr.... 即将下图晶格中所有的张量进行乘积
配分函数是所有权值的和:
Z=∑ijk...e−S(i,j,k,...)=∑ijk...TijkTilmTjnpTkqr....Z = \sum_{ijk...}e^{-S(i ,j,k,...)} = \sum_{ijk...}T_{ijk}T_{ilm}T_{jnp}T_{kqr}....Z=ijk...∑e−S(i,j,k,...)=ijk...∑TijkTilmTjnpTkqr....即,配分函数是通过取所有张量的乘积并且缩并每个键上的指标对得到。
2.2The TRG method
TRG是一种利用实空间RG流计算配分函数Z的方法,下面我们将解释这种方法在蜂窝晶格的情况下。
每个粗粒化迭代由两个单独的步骤组成(粗粒化转换):① 近似 ② 精确
如图所示:
①近似
首先找到一个张量SSS:
∑nSlinSjkn≈∑mTijmTklm\sum_nS_{lin}S_{jkn} \approx\sum_mT_{ijm}T_{klm}n∑SlinSjkn≈m∑TijmTklm注:如何找到SSS将在后面讲到
这时我们可以重新连接晶格,进行替换:
整个过程就是:
注:这时配分函数是通过在新晶格上收缩S张量得到的。
② 精确
我们将三组相邻点组合在一起,用一个粗粒化张量T′T^{'}T′格点代替它们:
其中张量T′T^{'}T′是由三角形的三个键缩并得到的:
Tijk′=∑pqrSkpqSjqrSirpT^{'}_{ijk} = \sum_{pqr}S_{kpq}S_{jqr}S_{irp}Tijk′=pqr∑SkpqSjqrSirp整个过程就是:
整个过程中格点的数量减少了三倍。
注:热力学观测值和相关函数可以由两种方法得到:
1.对FFF求导,其中F=−log(Z)F = -log(Z)F=−log(Z) (ZZZ为配分函数)
2.评估更一般模型的自由能,其中张量TijkT_{ijk}Tijk随位置而变化
注:张量TTT将收敛于不动点T∗T^{*}T∗
这种方法不局限于蜂窝晶格,也可以很容易地在其他晶格上实现,如图:
2.3如何确定SSS
我们将∑mTijmTklm\sum_mT_{ijm}T_{klm}∑mTijmTklm写为D2×D2D^2\times D^2D2×D2的矩阵MMM:
Mli,jk=∑mTijmTklmM_{li,jk} = \sum_mT_{ijm}T_{klm}Mli,jk=m∑TijmTklm我们也可以考虑张量SlinS_{lin}Slin为一个D2×DD^2\times DD2×D的矩阵
那么我们∑nSlinSjkn≈∑mTijmTklm\sum_nS_{lin}S_{jkn} \approx\sum_mT_{ijm}T_{klm}∑nSlinSjkn≈∑mTijmTklm问题可以化为找到矩阵SSS,使得满足:
M=SSTM = SS^TM=SST一般来说,这个因式分解不能精确地完成,因为MMM的秩为D2D^2D2,而SSTSS^TSST的秩最多为DDD
但是我们可以获得近似的解,其思想是选择误差∣M−SST∣2|M-SS^T|^2∣M−SST∣2最小的矩阵SSS,然后对MMM进行SVD分解得到我们最优的SSS。
更详细的步骤:
(1)Mli,jk=∑nsnUli,nVjk,n∗M_{li,jk} = \sum_n s_nU_{li,n}V_{jk,n}^*Mli,jk=∑nsnUli,nVjk,n∗(其中sns_nsn为奇异值,U,VU,VU,V是酉矩阵)
(2)截断矩阵Uli,nU_{li,n}Uli,n和Vjk,nV_{jk,n}Vjk,n,只保留与最大DDD个奇异值对应的列,于是我们得到矩阵U~li,n\tilde{U}_{li,n}U~li,n和V~jk,n\tilde{V}_{jk,n}V~jk,n的维数为D2×DD^2\times DD2×D
(3)最后我们令Slin=snU~li,nS_{lin} = \sqrt{s_n}\tilde{U}_{li,n}Slin=snU~li,n
注:只要我们稍微调整一下相位模糊度:Uli,n→Uli,neiϕn,Vjk,n→Vjk,ne−iϕnU_{l i, n} \rightarrow U_{l i, n} e^{i \phi_{n}}, V_{j k, n} \rightarrow V_{j k, n} e^{-i \phi_{n}}Uli,n→Uli,neiϕn,Vjk,n→Vjk,ne−iϕn就可以得到要求的因式分解。但是在实践中,忽略相位调整问题往往更方便,直接令SlinA=snU~li,n,SjknB=snV~jk,n∗S_{\mathrm{lin}}^{A}=\sqrt{s_{n}} \tilde{U}_{l i, n}, S_{j k n}^{B}=\sqrt{s_{n}} \tilde{V}_{j k, n}^{*}SlinA=snU~li,n,SjknB=snV~jk,n∗
结果就是我们得到:
∑nSlinASjknB≈∑mTijmTklm\sum_{n} S_{\operatorname{lin}}^{A} S_{j k n}^{B} \approx \sum_{m} T_{i j m} T_{k l m}n∑SlinASjknB≈m∑TijmTklm其中SAS^ASA和SBS^BSB只在一些相位因子上不同
我们可以运用TRG,只是我们需要对AAA和BBB格子追踪他们的张量TAT^ATA和TBT^BTB
注:
这种最优分解的误差与迭代次数无关,并且可以通过增加D来任意减小
误差为ε∼exp[−const×(logD)2]\varepsilon \sim exp[-const \times(logD)^2]ε∼exp[−const×(logD)2](与DMRG中的截断误差相同)
二维经典晶格模型的TRG方法相关推荐
- python二维元组_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)
如何去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, ...
- python可以使用二维元组吗_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)...
怎么去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, ...
- Java黑皮书课后题第8章:*8.16(对二维数组排序)编写一个方法,使用下面的方法头对二维数组排序。这个方法首先按行排序,然后按列排序
*8.16(对二维数组排序)编写一个方法,使用下面的方法头对二维数组排序.这个方法首先按行排序,然后按列排序 题目 题目描述 破题 代码 运行实例 题目 题目描述 *8.16(对二维数组排序)编写一个 ...
- php键值对数组排序,PHP按指定键值对二维数组进行排序的方法_PHP
本文实例讲述了PHP按指定键值对二维数组进行排序的方法.分享给大家供大家参考,具体如下: 问题: 有数组: 代码如下: array(0=>array('id'=>1,'price'=> ...
- 用new创建一个二维数组,有两种方法,是等价的
//用new创建一个二维数组,有两种方法,是等价的 一: int (*p)[10] = new int[5][10]; 二: int **p ...
- python元组读取到列表_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)...
如何去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, ...
- 通过指针访问二维数组的三种方法
下面总结了一下通过指针访问二维数组的三种方法,里边涉及指针.指针数组.数组指针.指向指针的指针以及二维数组的应用,愿对于大家理解和使用指针有所参考和帮助. 程序如下: #include <std ...
- PHP开发日志 ━━ php、javascript生成二维码的三种方法
最简单最实例的goolge开源方法 推荐手册:php完全自学手册 1.google开放api 代码如下: $urlToEncode="http://www.helloweba.com&quo ...
- 二维码扫描讲解系统设计方法
二维码扫描讲解系统设计方法 测试软件平台进入: http://www.cqu-media.top http://www.cqu-media.com/qrcode.aspx http://www.cqu ...
最新文章
- 如何做好一场技术演讲-总结:3、如何把你的观点深深地刻在别人的脑海中?
- 李开复写给中国学生的七封信之给中国学生的第五封信——你有选择的权利(完)...
- java之对象的复制
- js for循环与for in循环的区别
- datagrid wpf 刷新数据_c# – WPF Datagrid-自动刷新
- C++使用SQLite步骤及示例
- linux操作系统原理_Linux系统从新手到运维老鸟学习指南
- 信息安全工程师笔记-公钥密钥体制概念
- 79.纯 CSS 创作单元素麦当劳金拱门 Logo(自创)
- php 判断是不是gbk,PHP 正则判断中文UTF-8或GBK的思路及具体实现_PHP教程
- matlab:预测股票价格走势
- 2022-2028全球与中国语音控制设备市场现状及未来发展趋势
- MYSQL误删除DELETE数据找回
- k8s中控制器使用详解
- git --reset hard命令回退版本后恢复
- 额定功率台式计算机,解决方案:计算机电源分类当前的台式计算机电源的额定功率为200-4...
- AutoRunner 功能自动化测试项目实训之手工添加对象(十六)
- java中read方法
- 51CTO下载中心-我的资源库
- android字体行距,android中怎么调整字体的间距和行间距
热门文章
- 11.13总结周报1
- 企业如何进行数据质量管理
- Orangepi 4B
- 使用新版 net.lingala.zip4j.ZipFile 对文件打包加密
- flink报错:No new data sinks have been defined since the last execution
- (附源码)计算机毕业设计SSM音乐资源分享网站
- SML实现图像标注/分类
- CAN总线数据记录仪及其重要性 CAN bus data logger
- 『已解决』SSL certificate problem: self signed certificate in certificate chain
- unity 曲线可视化图表制作(lineRenderer + 贝塞尔曲线)