NRG Methods
4.2 Real-Space Renormalization Group
概述:实空间重整化群方法是一种基于物理直观理解的强大近似方法,系统的基态由系统(非相互作用)二分的低能态组成的假设。基于这一假设,的确有可能引入一种算法,允许描述具有大尺寸 N 的多体量子系统基态性质,最高抵达重整化流不动点的热力学极限。
算法内容:如下
0. 构建一个 N-sites 系统,获得 d^N => d^N 的 哈密顿量
1. 对角化 哈密顿量,获得对应的本征值和本征向量,以及低能态的截断投影算符
;
2. 格点规模扩大:倍增 哈密顿量 N => 2N 使用每个二分的投影哈密顿量 + 它们之间的相互作用,构造2N大小系统的哈密顿量.
3. 重复 step1 - step2,虽然 N => 2N 在倍增,但有效表示部分维度仍然截断在 m
评价:过去的四十年里,这个优雅而强大的想法引发了大量的理论和数值工作,并使我们极大地增强了对多体量子系统的理解,然而,这个假设并不总是正确的,事实上,有一些重要的物理系统类别很轻易地违背了。下面,我们回顾其中一个例子,并进入开发另一种强大算法背后的直觉。
算法实现(要点):
(1)对于N*N矩阵的精确对角化:
numpy 自带有 lanczos 算法,对本征值进行升序排列
(2)Truncation - Crose-graining:
生长至指定维数(N*N)=> 尽可能保证基矢量的可靠性,内存容忍(2N*2N)
倍增 令(N*N)=>(2N*2N)
(2N*2N)精确对角化并只保留前 N 个 本征值,
与 (N*N)精确对角化N位本征值的对应本征向量,
组成(N*N)Truncated-Hamiltonian。
import numpy as np
import numpy.linalg.eigh as eigh
H_current = H
# 初始化H_init
H_truncated = H_init
# 初始化H_truncated
for i in range(3):
# 投影基
_, eigVect_N = eigh(H_truncated)
# 截断 - 保留
eigVals_2N, eigVect_2N = eigh(H_current)
# H' = P*H*P.dagger()
proj = np.dot(eigVect_N, eigVect_2N[:,:m].T )
# P = |e><E|
H_truncated = np.dot(
proj,
np.dot( H_init,
proj.T ))
I = np.identity(H_truncated.shape[0])
# 这步出了点问题。。。
H_next = np.kron(H_truncated,I) + np.kron(H_truncated,I)
H_current = H_next
* 形式上是 2N * 2N 矩阵内的操作:Truncate到 N*N => 扩增得 2N*2N => N*N => 2N*2N......
(有待最后修正)