Matlab中的特征值计算?

时间:2015-08-08 17:47:34

标签: matlab

我要按计划计算特征值: 我想计算矩阵H,并实现特征值。

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  

但我总是得到这个错误:

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'.

如何解决此错误?

1 个答案:

答案 0 :(得分:1)

如果您在开头初始化H,则代码可以正常运行。

H = zeros(2,2);

<强>注意:

我不知道你计算特征值的方式。您应该使用预定义的函数eig来检查您的解决方案。另一种方法是使用SVD来计算特征向量和特征值。