用qutip.mesolve()计算含时变的时间演化哈密顿量

2024-10-01 02:30:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图找到一些初始状态的时间演化,其中z变量(时间演化梯度)也是时间相关的。通常qutip.mesolve()函数可用于z变量为常数且哈密顿量定义如下的情况:

def hamiltonian_t(t,args):
          """ evaluate the hamiltonian at time t. """
          H0 = args[0]
          Hp = args[1]
          z  = args[2]
          return (1-t*z)*H0 + t*z*Hp 

这是一个从H0到Hp的哈密顿量。然后我将qt.mesolve(hamiltonian_t,psi_init,tlist,[],[],H_args)args = (H0,Hp,z)一起使用

但对于与时间相关的z变量的当前问题,我尝试定义哈密顿量如下:

def hamiltonian_t(tz,args):
          """ evaluate the hamiltonian at time t. """
          H0 = args[0]
          Hp = args[1]
          t  = tz[0]
          z  = tz[1]
          return (1-t*z)*H0 + t*z*Hp 

这里args = (H0,Hp)用于一些H0和Hp。然后我尝试使用qt.mesolve(hamiltonian_t,psi_init,tz,[],[],H_args)来计算时间演化,其中tz=[(tlist[0],z[0]),...,(tlist[-1],z[-1])]。我在第t = tz[0]行收到错误TypeError: 'float' object is not subscriptable。我不明白为什么会出现这个错误,因为tz的输入是元组列表,而不是浮点。然后mesolve函数应该取每个列表元素并计算哈密顿量,至少我认为它是这样做的

当我对某些H0、Hp和z使用args = (H0,Hp,z)并且使用qt.mesolve(hamiltonian_t,psi_init,tlist,[],[],H_args)时,此函数通常用于查找时间演化,但我的问题涉及到一个z变量,该变量对于tlist中的每个t都不同。有人能帮我正确定义这个函数吗,这样qutip.mesolve()就可以对tlist中的每个时间使用相应的z并计算时间演变


Tags: 函数定义initdef时间argsqttz