Need Help Understanding a peculiar result when comparing MATLAB's Eigenvectors to my own

2 vues (au cours des 30 derniers jours)
Hello everyone, I am working on a simulation and have ran into an issue. To begin I am starting off with a 2D tight binding Hamiltonian on a NxN square lattice. That's more physics than MATLAB so we can think of states of this system as being represented by N^2x1 column vectors and index site (i,j) by the x=N*(i-1)+j-th component of this vector. This means we label sites sequentially through each row.
The tight binding Hamiltonian we want is for only nearest neighbor hopings with periodic boundary conditions. I'll just attach code which generates this but it is basically two diagonals offset from the main diagonal. The boundary conditions are a pain to code, but I know the energies I get are correct since I compared with the analytic solution.
The actual question starts here. Say we obtained our solutions with: [V,E]=eig(T) where T is the tight binding hamiltonian. We know:
Now this model is exactly solvable via a discrete fourier transform, which can be represented by the matrix: . k corresponds to the wave vectors in the first BZ zone and r the lattice positions relative to the center (don't worry about this if it doesn't make sense).
The issue I have is the following relation also holds:
Where E' is some permutation of the components of E. What I then investigated was the following products (just written in MATLAB code):
fix( V(:,l).' *Exp *10^3)/10^3;
I used fix so I could look at the sparse matrix and easily see where these guys are nonzero. We should expect this to be 1 for a single column of Exp and zero everywhere else, but this is not what I get! I often get 4 or so nonzero values!
I understand MATLAB can multiply it's eigenvectors by any constant, so they may not be exactly the same as what I have here but the issue is they should still be orthagonal. Hopefully someone has some clue on why this thing is not turning out how I expect it to since I am banging my head on my wall at this point.
  3 commentaires
Christine Tobler
Christine Tobler le 16 Fév 2021
Modifié(e) : Christine Tobler le 16 Fév 2021
I'd expect this would happen if you have multiple identical eigenvalues. In that case, any linear combination of the related eigenvectors is also an eigenvector, and the eigenvectors returned by MATLAB are likely to be some different basis of that eigenspace than the one you've computed. (I'm assuming the input matrix is hermitian, yes? Otherwise there's no guarantee that the computed eigenvectors are orthogonal).
Marcus Rosales
Marcus Rosales le 16 Fév 2021
This is correct and as is usually the case, something I learned right AFTER asking this question.
The issue really doesn't matter in the end since each individual linear combination has a bunch of nonzero values between my basis and theirs but will have the same over all "weight".
Turns out I had a typo :/ x=j+i*(N-1) instead of x=j+N*(i-1) so things were labeled wrong :(
Mostly any Hamiltonian in physics is Hermitian since you typically want real eigenvalues, but this is a sufficient condition and not a necessary one (non-Hermitian matricies with real eigenvalues exist). The orthagonality of eigen vectors here can be seen from a representation of the Kronecker delta using complex exponentials but of course it is also because H itself is hermitain.
Here is a plot of a spectral function for fun! Now that this is working I can do my actual project. Thanks for the reply.

Connectez-vous pour commenter.

Réponses (0)

Catégories

En savoir plus sur Linear Algebra dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by