ITensors.jl中的哈密顿量写法的物理意义及程序证明

在使用ITensors.jl编程序的时候,第一步往往是确定哈密顿量,但是从未经过系统性的训练。笔者往往会因为哈密顿量中加法和乘法的问题浪费时间。因此便花费一点时间求教,打算一次性解决此类问题。

先给一段代码:

sites = siteinds("S=1/2",4)
states = ["↑","↓","↑","↓"]
ψ0 = MPS(sites,states)
@show expect(ψ0,"Sz")

os1 = OpSum()
os1 += 1, "S-", 1
os1 += 1, "S-", 2
os1 += 1, "S-", 3
os1 += 1, "S-", 4
op1 = MPO(os1,sites)
ψ1 = apply(op1,ψ0)/norm(apply(op1,ψ0))
@show expect(ψ1,"Sz")

起始给定了系统的初态是|↑↓↑↓>,作用哈密顿量,输出作用前后的自旋Sz分量,如下:

expect(ψ0, "Sz") = [0.5, -0.5, 0.5, -0.5]
expect(ψ1, "Sz") = [-1.1185571585378694e-17, -0.5, -1.1185571585378694e-17, -0.5000000000000001]

可以看到除了2和4位置外,1、3位置上被作用哈密顿量后的Sz期望变为了0,这与我一开始认为的-0.5的观念是冲突的。

请教过后明白,哈密顿量如果以相加的形式给出,那么最后波函数的结果便是多项式哈密顿量的每一项分别作用到波函数上最后求和平均得到的。那么第一个结果应该是1(-0.5)+3(0.5)=0.25才对呀,为什么是0呢。这里是因为当"S-"作用到|↓>后,程序中得到的结果是NaN,在求和中NaN不会参与求和,因此结果变为了1(-0.5)+1(0.5)=0,这就符合结果了。

可是一开始我打算让哈密顿量的操作是使得每个位置上的自旋变为|↓>,那我们的哈密顿量该如何书写呢,

sites = siteinds("S=1/2",4)
states = ["↑","↓","↑","↓"]
ψ0 = MPS(sites,states)
@show expect(ψ0,"Sz")

os1 = OpSum()
os1 += 0.1, "S-", 1, "S-", 3
op1 = MPO(os1,sites)
ψ1 = apply(op1,ψ0)/norm(apply(op1,ψ0))
@show expect(ψ1,"Sz");

对了,那就是不要让波函数去求和平均,直接对单个波函数进行操作。这就要求我们要把操作算符以点乘的形式书写在哈密顿量里。结果如下:

expect(ψ0, "Sz") = [0.5, -0.5, 0.5, -0.5]
expect(ψ1, "Sz") = [-0.5, -0.5, -0.5, -0.5]

非常完美,正如预期所料。

因此得出结论:相加是多次操作得到波函数叠加归一,系数决定了多个波函数相加的权重;算符相乘才是对同一个波函数操作。

posted @ 2026-04-15 02:11  欢腾嘻嘻  阅读(6)  评论(0)    收藏  举报