Симметрия, потерянная при вычислении собственных векторов с Юлией - PullRequest
4 голосов
/ 04 февраля 2020

Может кто-нибудь указать, почему Джулия теряет симметрию при диагонализации определенных типов матриц? (В дальнейшем я буду игнорировать константы нормализации.) Я пытался решить следующую матрицу Флоке:

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, где используется целочисленное деление.

1 Ответ

0 голосов
/ 05 февраля 2020

Во-первых, ошибки округления, как правило, слегка нарушают симметрии, поэтому небольшие расхождения с зеркальной симметрией (относительные ошибки norm(Jp*vs - ±vs)/norm(vs) < 1e-12) не должны вызывать беспокойства.

Во-вторых, собственные значения энергии оператора p ^ 2 являются вырожденными вдвойне (левые и правые волны имеют одинаковую энергию), а четность вырожденных состояний не гарантируется симметрией. Любая линейная комбинация вырожденных четных и нечетных собственных функций (= стоячие волны) также является собственной функцией, поэтому вы можете создавать несимметричные c собственные функции (например, левую, а не стоячую волну). Когда у вас есть вырождение, правильное утверждение состоит в том, что вы можете выбрать базис собственных функций, который также является собственной функцией четности. Однако операция Джулии eigen (стандартный алгоритм LAPACK) в основном выбирает «случайный» базис для вырожденного собственного пространства, поэтому он не обязательно будет тем, который вам нужен.

В-третьих, он не похож на вы используете дискретное преобразование Фурье (ДПФ) правильно. По сути, вы используете DFT для express оператора второй производной (p ^ 2) в плосковолновой (импульс-пространственной) основе, но ваш опубликованный ответ забывает о псевдонимах - вам действительно нужно иметь оба положительных и отрицательные частоты присутствуют. То есть частота половины терминов должна быть пропорциональна i-1 (из-за индексации Юлии на основе 1), а другая половина - N+1-i. Это подробно объясняется во многих источниках, например в этих примечаниях .

...