MATLAB 厄米矩阵求本征值其值为实数,但是怎么我的出来还是复数呢?值与B 无关J=1;b=1;D=3;k=0.5; syms Bu=sqrt(J.^2+b.^2+D.^2); v=-1/4.*J.*k;w_1=1/2.*sqrt(4.*b.^2-4.*J.*k.*b+J.^2.*k.^2+3.*J.^2+3.*D.^2);w_2=1/2.*sqrt(4.*b.^2+4.*J

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/12 09:16:07
MATLAB 厄米矩阵求本征值其值为实数,但是怎么我的出来还是复数呢?值与B 无关J=1;b=1;D=3;k=0.5; syms Bu=sqrt(J.^2+b.^2+D.^2); v=-1/4.*J.*k;w_1=1/2.*sqrt(4.*b.^2-4.*J.*k.*b+J.^2.*k.^2+3.*J.^2+3.*D.^2);w_2=1/2.*sqrt(4.*b.^2+4.*J

MATLAB 厄米矩阵求本征值其值为实数,但是怎么我的出来还是复数呢?值与B 无关J=1;b=1;D=3;k=0.5; syms Bu=sqrt(J.^2+b.^2+D.^2); v=-1/4.*J.*k;w_1=1/2.*sqrt(4.*b.^2-4.*J.*k.*b+J.^2.*k.^2+3.*J.^2+3.*D.^2);w_2=1/2.*sqrt(4.*b.^2+4.*J
MATLAB 厄米矩阵求本征值其值为实数,但是怎么我的出来还是复数呢?值与B 无关
J=1;b=1;D=3;k=0.5; syms B
u=sqrt(J.^2+b.^2+D.^2);
v=-1/4.*J.*k;
w_1=1/2.*sqrt(4.*b.^2-4.*J.*k.*b+J.^2.*k.^2+3.*J.^2+3.*D.^2);
w_2=1/2.*sqrt(4.*b.^2+4.*J.*k.*b+J.^2.*k.^2+3.*J.^2+3.*D.^2);
a_1=sqrt(3).*(4.*J.*(b+B+v+w_1)-J.^2.*k-4.*J.*B-4.*D.*(b+B+v+w_1)*1i+J.*k.*D*1i+4.*B.*D*1i)./(6.*(J.^2+D.^2));
a_2=sqrt(3).*(4.*J.*(b+B+v-w_1)-J.^2.*k-4.*J.*B-4.*D.*(b+B+v-w_1)*1i+J.*k.*D*1i+4.*B.*D*1i)./(6.*(J.^2+D.^2));
a_3=-sqrt(3).*(-4.*J.*(b+B+v+w_2)+J.^2.*k+4.*J.*B-4.*D.*(b+B+v+w_2)*1i+J.*k.*D*1i+4.*B.*D*1i)./(6.*(J.^2+D.^2));
a_4=-sqrt(3).*(-4.*J.*(-b-B+v-w_2)+J.^2.*k-4.*J.*B-4.*D.*(-b-B+v-w_2)*1i+J.*k.*D*1i-4.*B.*D*1i)./(6.*(J.^2+D.^2));
a_5=(-4.*J.*(v+u)-J.^2.*k-4.*J.*b+4.*D.*(v+u)*1i+J.*k.*D*1i+4.*b.*D*1i)./(-4.*(J.^2+D.^2));
a_6=(-4.*J.*(v-u)-J.^2.*k-4.*J.*b+4.*D.*(v-u)*1i+J.*k.*D*1i+4.*b.*D*1i)./(-4.*(J.^2+D.^2));
rho_12=1/sqrt(a_2*conj(a_2)+1);rho_15=conj(a_2)./sqrt(a_2*conj(a_2)+1);
rho_21=1/sqrt(a_2*conj(a_2)+1);
rho_22=1/sqrt(a_2*conj(a_2)+1);rho_25=conj(a_2)./sqrt(a_2*conj(a_2)+1);
rho_52= a_2./(a_2*conj(a_2)+1);rho_55=(a_2)^2./sqrt(a_2*conj(a_2)+1);
rho_51=(a_2)./sqrt(a_2*conj(a_2)+1);
h=1/4*[1 rho_12 0 0 rho_51 0 0 0;...
conj(rho_12) rho_22 0 0 0 rho_52 0 0;...
0 0 0 0 0 0 0 0; 0 0 0 0 0 0 0 0;...
conj(rho_51) 0 0 0 rho_55 0 0 0;...
0 conj(rho_52) 0 0 0 0 0 0;0 0 0 0 0 0 0 0;0 0 0 0 0 0 0 0];
[x,y]=eig(h)
rho_12=1/sqrt((abs(a_2)).^2+1);rho_15=conj(a_2)./sqrt((abs(a_2)).^2+1);
rho_21=1/sqrt((abs(a_2)).^2+1);
rho_22=1/((abs(a_2)).^2+1);rho_25=conj(a_2)./((abs(a_2)).^2+1);
rho_52= a_2./((abs(a_2)).^2+1);rho_55=(abs(a_2)).^2./sqrt((abs(a_2)).^2+1);
rho_51=(a_2)./sqrt((abs(a_2)).^2+1);
得到的是实数,但是由于数值过长无法在屏幕显示,实际上本征值是在-1与1之间的小数,怎样实现它自动进行数值计算呢?或者问题可能出现在别的什么地方?

MATLAB 厄米矩阵求本征值其值为实数,但是怎么我的出来还是复数呢?值与B 无关J=1;b=1;D=3;k=0.5; syms Bu=sqrt(J.^2+b.^2+D.^2); v=-1/4.*J.*k;w_1=1/2.*sqrt(4.*b.^2-4.*J.*k.*b+J.^2.*k.^2+3.*J.^2+3.*D.^2);w_2=1/2.*sqrt(4.*b.^2+4.*J
你先确保你的矩阵确实是Hermite阵再说
一眼看去rho_55如果是实数的话a_2只能是实数或者纯虚数,但你的代码不足以保证这一点