时间演变: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 (将#修改为@)