我感兴趣的是用给定的矩阵H计算向量v(初始状态)的时间演化
有两种方法可以做到这一点:
或
对角化H,并在该基(量子力学的能量基)中表示v(初始向量)
——>;v=和(特征向量i*ci),
本征向量t_i=H的本征向量,c_i=复共轭(本征向量t_i)和v的标量积
——>;v的时间演化:v_演化=和(exp(-i*t*本征值_i)*本征向量_i*c_i),
本征值i=H的本征值
然而,当我实现这两种方法时,对于演化状态v_演化,我不会得到相同的结果。我做错了什么
H = np.array([[-4., -2., -2., 0., -2., 0., 0., -2.],
[-2., 0., 0., -2., 0., -2., -2., 0.],
[-2., 0., 0., -2., 0., -2., -2., 0.],
[ 0., -2., -2., 0., -2., 0., 0., -2.],
[-2., 0., 0., -2., 0., -2., -2., 0.],
[ 0., -2., -2., 0., -2., 4., 0., -2.],
[ 0., -2., -2., 0., -2., 0., 0., -2.],
[-2., 0., 0., -2., 0., -2., -2., 0.]])
v = np.array([1,0,0,0,0,0,0,0])
t = 100
#method 1: scipy.sparse.linalg.expm_multiply
evolved_1 = scipy.sparse.linalg.expm_multiply(-(1j)*t*H,v)
#mehtod 2: exact diagonalization
eigenval,eigenvect = np.linalg.eigh(H)
evolved_2 = 0
for i in range(len(eigenval)):
evolved_2 += np.exp(-1j*eigenval[i]*t)*eigenvect[i]*np.vdot(eigenvect[i],v)
print('evolved state method_1: \n',evolved_1, '\n normalization:',np.vdot(evolved_1,evolved_1))
print('\n')
print('evolved state method_2: \n',evolved_2, '\n normalization:',np.vdot(evolved_2,evolved_2))
目前没有回答
相关问题 更多 >
编程相关推荐