我想从现实空间代表中改变。动量空间代表我有一个汉密尔顿算子(安德森模型),并且计算了它的本征态的某种熵(这在起作用,我明白了我想要的)。接下来,我想更改为动力代表。使用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)中看起来不像我想要的那样,并且未进行标准化。
答案 0 :(得分:0)
如果您写
会发生什么?P = fft(V) / sqrt(N);
因为,当我在Matlab中阅读FFT帮助文档时,它表明FFT是
N
X(k) = Sum x(n) * exp( -i*2*pi* (k-1) * (n-1)/N ), 1 <= k <= N
n=1
但是本征向量V
的矩阵是unit矩阵,当您使用FFT切换到动量空间时,您需要再次获得get矩阵,因此您需要离散傅里叶变换(DFT)成为unit运算符(DFT)只是指数矩阵,如下面的矩阵方程所示。因此,要使DFT成为单一转换,您需要公式
如果您采用离散傅立叶变换矩阵的两行,分别说k
和m
行,并形成其厄米点积,则得到
当您进行扩展和简化时
当您仔细查看这个总和时
因此,DFT是一个ary矩阵,因此它会将位置表示中的哈密顿量的归一化本征态转换为动量表示中哈密顿量的相应归一化本征态。