微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

时间演变:scipy.linalg.expm_multiply() 或与 np.linalg.eigh() 对角化?

如何解决时间演变:scipy.linalg.expm_multiply() 或与 np.linalg.eigh() 对角化?

我对使用给定矩阵 H 计算向量 v(初始状态)的时间演化感兴趣。

有两种方法可以做到这一点:

  • 使用矩阵指数 exp(-itH),其中 H 是一个矩阵(Hamiltonian),t 是进化的时间,i 是虚数 --> 使用 scipy。 sparse.linalg.expm_multiply()

  • 对角化 H,并在该基(量子力学的能量基)中表示 v(初始向量)

    --> v = sum(eigenvect_i*c_i),
    eigenvect_i = H 和 c_i 的特征向量 = 复共轭 (eigenvect_i) 和 v 的标量积

    --> v 的时间演化: v_evolved = sum(exp(-i*t*eigenval_i)*eigenvect_i*c_i),
    eigenval_i = H 的特征值

然而,当我实现这两种方法时,对于进化状态 v_evolved,我没有得到相同的结果。我做错了什么?


    H = np.array([[-4.,-2.,0.,-2.],[-2.,0.],[ 0.,4.,0.]])
    v = np.array([1,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,np.vdot(evolved_2,evolved_2))


版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。