MATLAB Answers

eigenvalue calculation of hermitian matrix reveals imaginary roots() function?

1 view (last 30 days)
Rebecca Müller
Rebecca Müller on 12 Feb 2020
Commented: David Goodmanson on 16 Feb 2020
Hey :)
I am trying to find the eigenvalues of a hermitian matrix (H). The function eig(H) reveals a solution, but it is too long to be displayed in the output window. So I tried to just "calculate by steps" by trying to find the zeroes of the determinant det(H-ev*E)==0. Matlab now finds an imaginary roots() solution (how can that be as H is hermitian) which cannot be solved by solve() (no analytical solution found). If i specify that my eigenvalues should be real, i directly get the answer that no analytical solution can be found.
Any suggestions? (Sure, it is possible that a matrix does not have (real) eigenvalues, but i am pretty sure this one has...and i mean eig(H) reveals something as well...)
Many thanks in advance!
P.s. I use MATLAB R2018a, my code is:
clear
syms a b m kx ky kz D1 D2 e real
E = [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1];
N = [e 0 0 0 0 0 0 0; 0 e 0 0 0 0 0 0; 0 0 e 0 0 0 0 0; 0 0 0 e 0 0 0 0; 0 0 0 0 e 0 0 0; 0 0 0 0 0 e 0 0; 0 0 0 0 0 0 e 0; 0 0 0 0 0 0 0 e];
U = [0 0 0 1; 0 0 -1 0; 0 1 0 0; -1 0 0 0];
Jx = 1/2*[0 sqrt(3) 0 0; sqrt(3) 0 2 0; 0 2 0 sqrt(3); 0 0 sqrt(3) 0];
Jy = i/2*[0 -sqrt(3) 0 0; sqrt(3) 0 -2 0; 0 2 0 -sqrt(3); 0 0 sqrt(3) 0];
Jz = 1/2*[3 0 0 0; 0 1 0 0; 0 0 -1 0; 0 0 0 -3];
D = (D1*(Jy*Jz+Jz*Jy)+i*D2*(Jx*Jz+Jz*Jx))*U/sqrt(3);
h = a*E+b*(kx*Jx+ky*Jy+kz*Jz)^2;
H = [h D; ctranspose(D) -transpose(h)];
Z = det(H - N)==0;
g = solve(Z,e,'Real',true)

  1 Comment

David Goodmanson
David Goodmanson on 16 Feb 2020
Hello Rebecca,
looking at (H -H') certainly verifies that H is hermitian, so as you say any complex eigenvalues would be bogus (except for cases where the eigenvector is really zero and numerical issues result in a tiny complex value). I don't have anything concrete to contribute on solving for the eigenvalues, but you can save yourself some trouble at the beginning with
syms e % as you have
E = sym(eye(4))
N = e*eye(8)

Sign in to comment.

Answers (0)

Sign in to answer this question.


Translated by