我想从实空间表示改变为动量空间表示我有一个汉密尔顿算子(安德森模型),我计算了它的本征态的某种熵(这是有效的,我明白了我想要的)。接下来我想改成动量repr。使用 FFT,现在我在动量空间中的本征态没有归一化。例如,如果我计算本征态的平方和,它必须为 1,但它不起作用。
我试图对特征态的平方求和并用它们进行归一化,但它不起作用(我显示代码没有任何失败的尝试)。
N=100; %dim of matrix
Nx=15; %number of points
%because of log scale
xmin = -3.0;
xmax = 3.0;
dx = (xmax - xmin)/(Nx-1);
x = zeros(1,Nx); %x axis pre
ss = zeros(1,Nx); %entropy pre
spp=zeros(1,Nx); %entropy in Fourier space pre
eps=1.0e-6;
for ix=1:Nx
%log scale
x(ix) = xmin + (ix-1)*dx;
xx = 10.0^x(ix);
average_s=0;
average_spp=0;
%anderson modell
W=xx;
r=rand(1,N)*W-(W/2);
A=diag(ones(1,N-1),1)+diag(ones(1,N-1),-1)+diag(r);
%diagonalization
[V,D]=eig(A);
%PROBLEM HERE:
%Fourier transformation
P=fft(V)/(sqrt(2*pi)*N);
P=abs(P);
for j=1:N
four_sum=0; square_sum=0; entropy=0;
four_sum_p=0; square_sum_p=0; entropyp=0;
for i=1:N
%Fou
probp=(P(i,j)).^2;
square_sum_p=square_sum_p+probp;
if probp>eps
entropyp=entropyp-probp*log(probp);
end;
four_sum_p=four_sum_p+probp.^2;
%Real
prob=V(i,j).^2;
square_sum=square_sum+prob;
if prob>eps
entropy=entropy-prob*log(prob);
end;
four_sum=four_sum+prob.^2;
end
qp=square_sum_p.^2/(four_sum_p);
average_spp=average_spp+entropyp-log(qp);
q=square_sum.^2/(four_sum);
average_s=average_s+entropy-log(q);
end
ss(ix)=average_s/N;
spp(ix)=average_spp/N;
end
plot(x,ss,x,spp);
真实空间中的结构熵(ss 向量)具有正确的形式,但在 FFT 之后的动量空间(spp)中,它看起来不像我想要的那样,并且它没有被归一化。