我试图实现
split-step fourier方法来解决光学中的非线性薛定谔方程.它主要分别处理线性部分和非线性部分.它通过傅立叶变换和时域中的非线性部分来求解线性部分.
从书中复制以下代码:
alpha = 0
beta_2 = 1
gamma = 1
T = linspace(-5,5,2^13);
delta_T = T(2)-T(1);
L = max(size(A));
delta_omega = 1/L/delta_T*2*pi;
omega = (-L/2:1:L/2-1)*delta_omega;
A = 2*sech(T);
A_t = A;
step_num = 1000;
h = 0.5*pi/step_num;
results = zeros(L,step_num);
A_f = fftshift(fft(A_t));
for n=1:step_num
A_f = A_f.*exp(-alpha*(h/2)-1i*beta_2/2*omega.^2*(h/2));
A_t = ifft(A_f);
A_t = A_t.*exp(1i*gamma*(abs(A_t).^2*h));
A_f = fft(A_t);
A_f = A_f.*exp(-alpha*(h/2)-1i*beta_2/2*omega.^2*(h/2));
A_t = ifft(A_f);
results(:,n) = abs(A_t);
end
其中A_t是脉冲(要求解的函数).我不明白的是,在一开始它使用fftshift将零频率移动到中心,但是后来在循环中它没有ffthift.我尝试将fftshift添加到主循环中,或者在开始时将其删除.两者都给出了错误的结果,为什么呢?一般来说,我什么时候应该使用fftshift和ifftshift,特别是当我试图像这种情况那样解决微分方程时?
谢谢