Consider a matrix given by
$$ H = \begin{pmatrix} t(z) && q(z) \\ r(z) && w(z) \end{pmatrix} $$
where $t,q,r,w$ are Laurent polynomials of $z$.
(NB:I suppose the background here is not most relevant. You may go to the equations directly. Please inform me if you need more information about the background, though.)
A well established result in physics is that, if we take $z = \exp(2\pi k i/n)$, then $H$ would represent a phase space Hamiltonian. Its real space counterpart with fixed matrix size $2n$ under periodic boundary conditions, would have eigenvalues given by
$$ E = \frac12 \left( (t+w)\pm\sqrt{(t+w)^2+4qr} \right),\forall k \in N, \qquad z = \exp(2\pi k i/n) $$
Which exactly takes the form of the solution of characteristic equation in phase space.
My problem is, what is order of the distance of the two nearest real space eigenvalues of $H$ w.r.t. $n$? A natural guess is that the distance converges to $0$ by $O(\frac{1}{n})$, however my calculations show that it is closer to $O(exp(-Cn))$. My python code and calculated sample is below.
import numpy as np
import matplotlib.pyplot as plt
import cmath
import math
t1 =0.2;tm1 = 1; t0 = 1.2;w1 =-1.7; wm1 = 0.6; w0 = 0.5;q1 = 1; qm1 = 0; q0 = 0.2;r1 = 0.2; rm1 = 2;r0=-0.6;#parameters
#Hamiltonian = np.array([[t1Z + tm1/Z + t0, q1Z + qm1/Z + q0],
# [r1Z + rm1/Z + r0, w1Z + wm1/Z + w0]]);
chooseN=range(10,201,4)
#The size of systems. Only sizes which are multiples of 2 are meaningful. It shows some kind of periodicity.
logMindiff=[1]*len(chooseN)
for count in range(len(chooseN)):
n=chooseN[count];
Esol=np.zeros(2*n,dtype=np.complex_);
Ediff = np.zeros((2*n,2*n),dtype=np.complex_)
for k in range(n):
Z=cmath.exp(2*math.pi*k*1j/n)
Esol[2*k]=1/2*(t1*Z + tm1/Z + t0+w1*Z + wm1/Z + w0)+((t1*Z + tm1/Z + t0+w1*Z + wm1/Z + w0)**2+4*(q1*Z + qm1/Z + q0)*(r1*Z + rm1/Z + r0))**(0.5)
Esol[2*k+1]=1/2*(t1*Z + tm1/Z + t0+w1*Z + wm1/Z + w0)-((t1*Z + tm1/Z + t0+w1*Z + wm1/Z + w0)**2+4*(q1*Z + qm1/Z + q0)*(r1*Z + rm1/Z + r0))**(0.5)
#the desired radical solution
for row in range(2*n):
for column in range(2*n):
if row == column:
Ediff[row][column]=999;
elif row!= column:
Ediff[row][column]=abs(Esol[row]-Esol[column]);
logMindiff[count]=math.log(np.min(abs(Ediff)))
plt.plot(chooseN,logMindiff, marker='.', color='r',label='q')
plt.xlabel('PBC systemsize')
plt.ylabel('log min E diff')
plt.legend()
plt.show()
