【问题标题】:How to "normalize"(?) a vector after fft in MATLAB?如何在MATLAB中的fft之后“标准化”(?)一个向量?
【发布时间】: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


    【解决方案1】:

    如果你写了会发生什么

    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 是酉的,当您使用 FFT 切换到动量空间时,您需要再次获得酉矩阵,因此您需要离散傅里叶变换 (DFT) 作为酉算子(DFT 只是一个指数矩阵,如下面的矩阵方程所示)。因此,要使 DFT 成为酉变换,需要公式

    如果你取离散傅里叶变换矩阵的两行不同的行,比如行 km,并形成它们的厄米特点积,你会得到

    当你扩展和简化它时

    当你仔细观察这个总和时

    因此,DFT 是一个酉矩阵,因此它将位置表示中哈密顿量的归一化本征态转换为动量表示中哈密顿量的相应归一化本征态。

    【讨论】:

      猜你喜欢
      • 2016-04-17
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 2017-12-21
      • 2011-06-18
      相关资源
      最近更新 更多