【发布时间】:2019-10-18 01:18:07
【问题描述】:
我想从实空间 repr 更改。到动量空间代表。我有一个汉密尔顿算子(安德森模型),我计算了它的本征态的某种熵(这是有效的,我明白了我想要什么)。接下来我想改成动量repr。使用fft,现在我在动量空间中的本征态没有归一化(?)。例如。如果我计算特征态^2的总和,它必须是1,但它不起作用。
我试图对特征态^2 求和并用它们进行归一化,但它不起作用(我显示的代码没有任何失败的尝试)。
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)中却不是我想要的样子,而且它没有被归一化。
【问题讨论】:
标签: matlab fft physics entropy