barana
barana

Reputation: 11

Eigenvalues calculations in Matlab?

I am going calculate the eigenvalues follow program: I want to calculate the matrix H , and achieve eigenvalues.

acc=1.44e-10;
a=1.732*acc;
t=-2.550;
x1=0;
y1=0;
z1=0;
x2=acc*cos(60);
y2=acc*sin(60);
z2=0;
sh=0; 

for i=-1:1
    for j=-1:1
        for k=1:2
            sh=sh+1;
            xk=acc*cos(60)*(k-1);
            yk=acc*sin(60)*(k-1);
            zk=0;
            xx(sh)=(i*a)+(j*a/2)+xk;
            yy(sh)=(sqrt(3)/2)*a*j+yk;
            zz(sh)=zk;
            ki(sh)=k;
            R1(sh)=i;
            R2(sh)=j;
        end
    end
end

L0=sqrt((x2-x1)^2+(y2-y1)^2+(z2-z1)^2);

r1=0:0.02:1;
kx=(2*pi/(sqrt(3)*a))*(1-r1);
ky=(2*pi/(3*a))*(1-r1);
for ik=1:50
    for i=1:2
        for j=1:sh
            Dis(i+8,j)=sqrt((xx(i)-xx(j))^2+(yy(i)-yy(j))^2+(zz(i)-zz(j))^2);
            if abs(Dis-L0)<0.1
                Rx=R1(sh)*a+R2(sh)*a/2;
                Ry=R2(sh)*sqrt(3)/2*a;
                H(ki(i+8),ki(j))=H(ki(i+8),ki(j))+t*exp(1i*(kx(ik)*Rx+ky(ik)*Ry));
            end
        end
    end
end  

But I always get this error:

Error in  (line 44)
                H(ki(i+8),ki(j))=H(ki(i+8),ki(j))+t*exp(1i*(kx(ik)*Rx+ky(ik)*Ry));
Undefined function 'H' for input arguments of type 'double'.

How to solve this error?

Upvotes: 1

Views: 75

Answers (1)

NKN
NKN

Reputation: 6424

If you initialize H in the beginning, the code works.

H = zeros(2,2);

Notice:

I do not know the way you are calculating the eigenvalues. You should use the predefined function eig to check your solution. Another ways is to use SVD to calculate the eigenvectors and eigenvalues.

Upvotes: 1

Related Questions