我正在尝试实现分裂-傅里叶方法,以解决光学中的非线性薛定谔方程。基本上它将线性部分和非线性部分分开处理。它通过使用傅里叶变换解决线性部分,并在时间域中解决非线性部分。
以下代码来自一本书:
以下代码来自一本书:
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
将零频率移动到中心,但后来在循环中它没有fftshift
。我尝试在主循环中添加fftshift
或在一开始删除它。两者都会导致错误的结果,为什么?通常情况下,我应该在什么时候使用fftshift
和ifftshift
,特别是在像这种求解微分方程的情况下?
谢谢
omega
是什么 - 通常情况下,当您假设频率为零中心时,您需要使用fftshift
等函数,因为fft
和ifft
假定输入/输出以零开始。您能否发布一个简短但完整的示例? - Ahmed Fasih