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,...)=Tijk​Tilm​Tjnp​Tkqr​.... 即将下图晶格中所有的张量进行乘积
配分函数是所有权值的和:
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...∑​Tijk​Tilm​Tjnp​Tkqr​....即,配分函数是通过取所有张量的乘积并且缩并每个键上的指标对得到。

2.2The TRG method

TRG是一种利用实空间RG流计算配分函数Z的方法,下面我们将解释这种方法在蜂窝晶格的情况下。
每个粗粒化迭代由两个单独的步骤组成(粗粒化转换):① 近似 ② 精确
如图所示:

①近似
首先找到一个张量SSS:
∑nSlinSjkn≈∑mTijmTklm\sum_nS_{lin}S_{jkn} \approx\sum_mT_{ijm}T_{klm}n∑​Slin​Sjkn​≈m∑​Tijm​Tklm​注:如何找到SSS将在后面讲到
这时我们可以重新连接晶格,进行替换:

整个过程就是:

注:这时配分函数是通过在新晶格上收缩S张量得到的。
② 精确
我们将三组相邻点组合在一起,用一个粗粒化张量T′T^{'}T′格点代替它们:

其中张量T′T^{'}T′是由三角形的三个键缩并得到的:
Tijk′=∑pqrSkpqSjqrSirpT^{'}_{ijk} = \sum_{pqr}S_{kpq}S_{jqr}S_{irp}Tijk′​=pqr∑​Skpq​Sjqr​Sirp​整个过程就是:

整个过程中格点的数量减少了三倍。


注:热力学观测值和相关函数可以由两种方法得到:
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}∑m​Tijm​Tklm​写为D2×D2D^2\times D^2D2×D2的矩阵MMM:
Mli,jk=∑mTijmTklmM_{li,jk} = \sum_mT_{ijm}T_{klm}Mli,jk​=m∑​Tijm​Tklm​我们也可以考虑张量SlinS_{lin}Slin​为一个D2×DD^2\times DD2×D的矩阵
那么我们∑nSlinSjkn≈∑mTijmTklm\sum_nS_{lin}S_{jkn} \approx\sum_mT_{ijm}T_{klm}∑n​Slin​Sjkn​≈∑m​Tijm​Tklm​问题可以化为找到矩阵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​=∑n​sn​Uli,n​Vjk,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​=sn​​U~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,n​eiϕn​,Vjk,n​→Vjk,n​e−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​=sn​​U~li,n​,SjknB​=sn​​V~jk,n∗​
结果就是我们得到:
∑nSlin⁡ASjknB≈∑mTijmTklm\sum_{n} S_{\operatorname{lin}}^{A} S_{j k n}^{B} \approx \sum_{m} T_{i j m} T_{k l m}n∑​SlinA​SjknB​≈m∑​Tijm​Tklm​其中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方法相关推荐

  1. python二维元组_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)

    如何去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, ...

  2. python可以使用二维元组吗_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)...

    怎么去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, ...

  3. Java黑皮书课后题第8章:*8.16(对二维数组排序)编写一个方法,使用下面的方法头对二维数组排序。这个方法首先按行排序,然后按列排序

    *8.16(对二维数组排序)编写一个方法,使用下面的方法头对二维数组排序.这个方法首先按行排序,然后按列排序 题目 题目描述 破题 代码 运行实例 题目 题目描述 *8.16(对二维数组排序)编写一个 ...

  4. php键值对数组排序,PHP按指定键值对二维数组进行排序的方法_PHP

    本文实例讲述了PHP按指定键值对二维数组进行排序的方法.分享给大家供大家参考,具体如下: 问题: 有数组: 代码如下: array(0=>array('id'=>1,'price'=> ...

  5. 用new创建一个二维数组,有两种方法,是等价的

    //用new创建一个二维数组,有两种方法,是等价的      一:      int   (*p)[10]   =   new   int[5][10];      二:      int   **p ...

  6. python元组读取到列表_python中读入二维csv格式的表格方法详解(以元组/列表形式表示)...

    如何去读取一个没有表头的二维csv文件(如下图所示)? 并以元组的形式表现数据: ((1.0, 0.0, 3.0, 180.0), (2.0, 0.0, 2.0, 180.0), (3.0, 0.0, ...

  7. 通过指针访问二维数组的三种方法

    下面总结了一下通过指针访问二维数组的三种方法,里边涉及指针.指针数组.数组指针.指向指针的指针以及二维数组的应用,愿对于大家理解和使用指针有所参考和帮助. 程序如下: #include <std ...

  8. PHP开发日志 ━━ php、javascript生成二维码的三种方法

    最简单最实例的goolge开源方法 推荐手册:php完全自学手册 1.google开放api 代码如下: $urlToEncode="http://www.helloweba.com&quo ...

  9. 二维码扫描讲解系统设计方法

    二维码扫描讲解系统设计方法 测试软件平台进入: http://www.cqu-media.top http://www.cqu-media.com/qrcode.aspx http://www.cqu ...

最新文章

  1. 如何做好一场技术演讲-总结:3、如何把你的观点深深地刻在别人的脑海中?
  2. 李开复写给中国学生的七封信之给中国学生的第五封信——你有选择的权利(完)...
  3. java之对象的复制
  4. js for循环与for in循环的区别
  5. datagrid wpf 刷新数据_c# – WPF Datagrid-自动刷新
  6. C++使用SQLite步骤及示例
  7. linux操作系统原理_Linux系统从新手到运维老鸟学习指南
  8. 信息安全工程师笔记-公钥密钥体制概念
  9. 79.纯 CSS 创作单元素麦当劳金拱门 Logo(自创)
  10. php 判断是不是gbk,PHP 正则判断中文UTF-8或GBK的思路及具体实现_PHP教程
  11. matlab:预测股票价格走势
  12. 2022-2028全球与中国语音控制设备市场现状及未来发展趋势
  13. MYSQL误删除DELETE数据找回
  14. k8s中控制器使用详解
  15. git --reset hard命令回退版本后恢复
  16. 额定功率台式计算机,解决方案:计算机电源分类当前的台式计算机电源的额定功率为200-4...
  17. AutoRunner 功能自动化测试项目实训之手工添加对象(十六)
  18. java中read方法
  19. 51CTO下载中心-我的资源库
  20. android字体行距,android中怎么调整字体的间距和行间距

热门文章

  1. 11.13总结周报1
  2. 企业如何进行数据质量管理
  3. Orangepi 4B
  4. 使用新版 net.lingala.zip4j.ZipFile 对文件打包加密
  5. flink报错:No new data sinks have been defined since the last execution
  6. (附源码)计算机毕业设计SSM音乐资源分享网站
  7. SML实现图像标注/分类
  8. CAN总线数据记录仪及其重要性 CAN bus data logger
  9. 『已解决』SSL certificate problem: self signed certificate in certificate chain
  10. unity 曲线可视化图表制作(lineRenderer + 贝塞尔曲线)