模拟安德森模型,动量表示有问题(MATLAB)

计算科学 matlab 特征值 傅里叶变换
2021-12-22 01:49:17

我想从实空间表示改变为动量空间表示我有一个汉密尔顿算子(安德森模型),我计算了它的本征态的某种熵(这是有效的,我明白了我想要的)。接下来我想改成动量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)中,它看起来不像我想要的那样,并且它没有被归一化。

0个回答
没有发现任何回复~