Hello everyone, I have a non-Hermitian matrix, but I find that even using vpa, I cannot obtain the correct eigenvalues. Does anyone know how to resolve this?

102 次查看(过去 30 天)
Below are my code and .mat data. The green circles represent the correct eigenvalue range for the non-Hermitian matrix (derived using a complex mathematical method; since the method is too complicated, I’m directly using the results obtained from it). The black points represent the eigenvalues computed using the vpa function, but they do not coincide with the green circles. (Indeed, the number of green circles and black points is different, but if the black points were correct, their upper and lower bounds should overlap.) This means that I didn’t obtain the correct eigenvalues. I know that non-Hermitian matrices cannot be exactly diagonalized, but I’ve heard from others that using the high-precision vpa function can help, but it doesn’t seem to work in my case.
load list_beta0.mat
load GBZband.mat
N=90;
t1=0.5;
t2=0.5;
t3=1/5;
gamma1=5/3;
gamma2=1/3;
HH=Hobc(t1,t2,t3,gamma1,gamma2,N);
[~,val]=eig(vpa(HH,34));
tval=diag(val);
[~,index]=sort(real(tval));
sort_valR=tval(index);
figure
hold on
scatter(t1.*ones(size(GBZband)), abs(GBZband),10,'go')
plot(t1.*ones(size(sort_valR)),abs(sort_valR),'k.','MarkerSize',8)
ggg=legend('GBZ-eigenval','OBC-eigenval');
set(ggg,'box','off')
hold off
function [op]=Hobc(t1,t2,t3,gamma1,gamma2,N)
a=[1;0];
b=[0;1];
H=zeros(2*N,2*N);
n1=zeros(N,1);
n2=zeros(N,1);
for n=1:N
n1(n)=1;
n2(n+1)=1;
H=H+(t1+gamma1/2).*kron(n1,a)*kron(n1',b')+(t1-gamma1/2).*kron(n1,b)*kron(n1',a');
if n~=N
H=H+(t2+gamma2/2).*kron(n1,b)*kron(n2',a')+(t2-gamma2/2).*kron(n2,a)*kron(n1',b')+...
t3.*(kron(n1,a)*kron(n2',b')+kron(n2,b)*kron(n1',a'));
end
n1=zeros(N,1);
n2=zeros(N,1);
end
op=H;
end
Does anyone have any insights on this issue? I look forward to any responses. If the question is unclear, please let me know.
  11 个评论
Paul
Paul 2025-1-1,14:55
编辑:Paul 2025-1-1,14:57
Consider a smaller problem, with N = 6
N = 6;
syms u v w s
H0 = H(u,v,w,N);
The characterisic polynomial of H0 is
c = collect(charpoly(H0,s),s);
Let v = -u and solve for the roots
v = -u;
e = solve(subs(c),s)
e = 
We see two repeated eigenvalues at the origin, and two sets of six repeated eigenvalues. For the prescribed values of u and w these eigenvalues are imaginary.
I'm going to speculate that it becomes very difficult to solve for the eigenvalues of H0 in double precision as N gets larger and v approaches -u (for the prescribed values of u and w), which I think is basically the problem of solving for near-repeated roots of a high order polynomial (note that roots actually solves for the roots using eig).
@Christine Tobler can probably provide more insight into solving for the eigenvalues of this particular matrix.
function [H0]=H(u,v,w,N)
T1=[];
T2=[];
for hh=1:N
T1=[T1;v+u;w+u];
T2=[T2;v-u;w-u];
end
T1=[T1;v+u];
T2=[T2;v-u];
H0=diag(T1,1)+diag(T2,-1);
end
Torsten
Torsten about 2 hours 前
I agree with @Paul. At v = -2.5, your matrix has two N-fold eigenvalues. In the neighborhood of v = -2.5, these eigenvalues spread to N distinct eigenvalues each, but it will be very difficult for the solver to separate them because they lie very close to each other.

请先登录,再进行评论。

回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Linear Algebra 的更多信息

产品


版本

R2023b

Community Treasure Hunt

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

Start Hunting!

Translated by