Я хочу использовать обратное БПФ для вычисления обратных преобразований Фурье. Я обнаружил, что могу легко сделать это с помощью интегрируемых с квадратом функций, но не с помощью распределений.
Сначала я устанавливаю вектор волновых чисел k и пространственную координату x,
clear;
nx = 2^10;
L = 20;
dx = L/nx;
x = [0:nx-1]' * dx - L/2;
k = zeros(nx,1);
k(1:nx/2+1) = 2*[0:nx/2]/nx;
k(nx:-1:nx/2+2) = -k(2:nx/2);
k = k*pi/dx ;
Затем я проверяю, что все работает на двух примерах: функция unit boxcar и sech:
% boxcar
Ghat = sin( k/2 ) ./ (k/2);
Ghat(1) = 1;
Gi = ifft(Ghat) / dx ;
Gi = ifftshift(Gi);
figure; plot(x,Gi);
% sech( x )
Ghat = pi*sech( pi*k /2 );
Gi = ifft(Ghat) / dx ;
Gi = ifftshift(Gi);
figure; plot(x,Gi,'o'); hold on;
analytical = sech(x);
plot(x,analytical,'-');
Они оба выглядят хорошо ...
Здесь все перестает работать:
% sin(x^2)
Ghat = -sqrt(pi)*sin( (k.^2-pi)/4 );
Gi = ifft(Ghat) / dx ;
Gi = ifftshift(Gi);
analytical = sin(x.^2);
figure;
plot(x,analytical,'-'); hold on;
plot(x,Gi,'o');
Вы заметите, что вычисленные значения не похожи на целевую функцию.
Я не знаю, почему это не сработает. Единственное, что я замечаю в Википедии , - это то, что sin (x ^ 2) является распределением и, следовательно, не является квадратично интегрируемым. Это источник моих проблем? Есть ли решение?