julia算法计算特征向量时的对称性损失

julia算法计算特征向量时的对称性损失,julia,numeric,Julia,Numeric,有人能指出为什么朱莉娅在对角化某些类型的矩阵时会失去对称性吗?(在下面我将忽略标准化常数。)我一直在尝试求解以下Floquet矩阵: U[i,i] = exp(-i^2im/N), 使用N时,矩阵和其他分量的维数为零。显然,这就是哈密顿量的“时间演化” H = p^2/2. 该H在奇偶校验下是对称的,在现场基础Us=Udft'U*Udft(Udft是离散傅里叶矩阵s.t.Udft[m,mp]=sqrt(N)^-1 exp(i*j*1im/N)见下文),也就是说,可以检查 Jp*Us - Us

有人能指出为什么朱莉娅在对角化某些类型的矩阵时会失去对称性吗?(在下面我将忽略标准化常数。)我一直在尝试求解以下Floquet矩阵:

U[i,i] = exp(-i^2im/N),
使用
N
时,矩阵和其他分量的维数为零。显然,这就是哈密顿量的“时间演化”

H = p^2/2.
H
在奇偶校验下是对称的,在现场基础
Us=Udft'U*Udft
Udft
是离散傅里叶矩阵s.t.
Udft[m,mp]=sqrt(N)^-1 exp(i*j*1im/N)
见下文),也就是说,可以检查

Jp*Us - Us*Jp = 0,
在哪里

Jp[i,j] = \delta_{i,N-j+1}
是空间逆矩阵。然而,本征态并不满足奇偶性。如果
vs
Us
的本征态,则

Jp*vs = \pm vs,
对于julia给出的数值结果,这是不可能的。这有点奇怪,因为对于低维,比如说
N=11
没有问题,但是如果我去,比如说
N=1001
,麻烦就开始出现了。(在某些条件下,我希望
N
为奇数。原因是我将粒子约束在酉圆上移动,并且我希望位置围绕零角对称。)要对角化,我使用
Julia 1.2.0

 LinearAlgebra.eigen(Us).
增编: 感谢SGJ指出DFT中的明显错误。要构造矩阵,我需要

M = div(N,2)
m = 1
for ii in -M:M
    mp = 1
    for jj in -M:M
        U[m,mp] = exp(2.0im*pi*ii*jj/Nsites) #                             
        mp += 1
    end
    m += 1
end

因此,正频率和负频率进入DFT,并在动量零点附近对称选择,从
-N/2
N/2
,其中使用整数除法。

首先,舍入误差通常会稍微破坏对称性,因此与镜像对称性的差异很小(相对误差
norm(Jp*vs-±vs)/norm(vs)<1e-12
)不应引起关注

其次,p^2算符的能量本征值是双重简并的(左行波和右行波具有相同的能量),并且简并态的奇偶性不是由对称性保证的。退化偶数和奇数本征函数(=驻波)的任何线性组合也是本征函数,因此可以生成非对称本征函数(例如,左行波而不是驻波)。当你有一个简并度时,正确的说法是你可以选择一个本征函数基,它也是一个奇偶本征函数。然而,Julia的
eigen
操作(标准LAPACK算法)基本上为退化特征空间选择了“随机”基,因此它不一定是您想要的


第三,看起来您没有正确使用离散傅里叶变换(DFT)。你基本上是在用DFT来表达平面波(动量空间)基础上的二阶导数算子(p^2),但是你贴出的答案忘记了混叠-你真的需要正负频率都存在。也就是说,一半术语的频率应与
i-1
成比例(由于Julia基于1的索引),另一半与
N+1-i
成比例。这在许多资料中都有详细解释,例如:

不确定这是否相关,但在你的
U
的对角线实体中,我注意到你写了
-I^2im/N
。这被解析为
i^(2im)/N
,而不是
i^2*im/N
。这可能是问题的根源吗?我的程序sintax是'exp(-1impii^2/Nsites)`所以我想这不是问题。我怀疑这与浮点数学没有关联有关。用
对称
包装矩阵可以解决问题吗?(它可能会发送到一个可以利用的专门方法)。你是说
对称(美国)
?Ups,对不起,我在DFT的定义中有正频率和负频率,我会在一分钟内更正。在DFT的通常定义中,正如我在链接的注释中所解释的,频率的顺序实际上是0,然后是正频率,然后是负频率。如果您想使用FFT而不是构建自己的DFT矩阵,则需要这种排序。