Python hermitian的scipy.linalg.expm不是特殊的幺正函数

Python hermitian的scipy.linalg.expm不是特殊的幺正函数,python,numpy,matrix,scipy,linear-algebra,Python,Numpy,Matrix,Scipy,Linear Algebra,例如,如果我有一个(实)厄米矩阵 H = matrix([[-2. , 0.5, 0.5, 0. ], [ 0.5, 2. , 0. , 0.5], [ 0.5, 0. , 0. , 0.5], [ 0. , 0.5, 0.5, 0. ]]) (该矩阵是厄米矩阵;它是耦合到外场的2自旋伊辛链的哈密顿量。) 然后存在一个特殊的正交变换O(保留矩阵的列向量和行向量的长度)s.t H=O.transpose()@D@O 其中D是

例如,如果我有一个(实)厄米矩阵

H = matrix([[-2. ,  0.5,  0.5,  0. ],
        [ 0.5,  2. ,  0. ,  0.5],
        [ 0.5,  0. ,  0. ,  0.5],
        [ 0. ,  0.5,  0.5,  0. ]])
(该矩阵是厄米矩阵;它是耦合到外场的2自旋伊辛链的哈密顿量。)

然后存在一个特殊的正交变换
O
(保留矩阵的列向量和行向量的长度)s.t

H=O.transpose()@D@O

其中
D
是对角线。对于矩阵指数,这将导致

T=expm(1j*H)=O.transpose()@expm(1j*D)@O

因此
T
的所有列/行向量必须具有长度
1

如果使用
scipy.linalg.expm
则违反此属性:

In [1]: import numpy as np                                                      

In [2]: from numpy import matrix                                                

In [3]: from scipy.linalg import expm                                           

In [4]: H = matrix([[-2. ,  0.5,  0.5,  0. ], 
   ...:         [ 0.5,  2. ,  0. ,  0.5], 
   ...:         [ 0.5,  0. ,  0. ,  0.5], 
   ...:         [ 0. ,  0.5,  0.5,  0. ]])                                      

In [5]: T = expm(1j * H)                                                        

In [6]: np.sum(np.abs(T[0]))                                                    
Out[6]: 1.6099093263121051

In [7]: np.sum(np.abs(T[1]))                                                    
Out[7]: 1.609909326312105

In [8]: np.sum(np.abs(T[2]))                                                    
Out[8]: 1.7770244703003222

In [9]: np.sum(np.abs(T[3]))                                                    
Out[9]: 1.7770244703003222


这是
expm
中的错误还是我在这里犯了错误?

您使用了错误的规范。使用

np.sqrt( np.sum( np.abs(T[0])**2 ) )
甚至以更短的方式

np.linalg.norm( T[0] )

你使用了错误的标准。使用

np.sqrt( np.sum( np.abs(T[0])**2 ) )
甚至以更短的方式

np.linalg.norm( T[0] )

我不知道我是怎么想到在这里使用1-范数的。谢谢。我不知道我是怎么想到在这里使用1-范数的。谢谢