Может кто-нибудь указать, почему Джулия теряет симметрию при диагонализации определенных типов матриц? (В дальнейшем я буду игнорировать константы нормализации.) Я пытался решить следующую матрицу Флоке:
U[i,i] = exp(-i^2im/N),
с N
размерность матрицы и других компонентов равны нулю. Ясно, что это «эволюция во времени» гамильтониана
H = p^2/2.
Это H
симметрично c по паритету и так же U
в базисе сайта Us = Udft'U*Udft
(Udft
является дискретной матрицей Фурье st 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,
, чего не происходит для числовых результатов, приведенных Юлией. Это немного странно, потому что для малой размерности, скажем, N=11
нет проблем, но если я go, скажем, N=1001
, тогда проблема начинает появляться. (Для определенных условий я хочу, чтобы N
был нечетным. Причина в том, что я вынужден перемещать частицу по унитарному кругу и хочу, чтобы узлы были симметричны c вокруг угла ноль.) Для диагонализации я использую 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
, чтобы положительные и отрицательные частоты входили в ДПФ и выбирались симметрично c вокруг нуля импульса от -N/2
до N/2
, где используется целочисленное деление.