function fourier(func,xrange,frange)
% FOURIER plots function and its transform.
%  The function should be either even or odd (not mixed)

if (nargin<3)
    frange = 2;
end
if (nargin<2)
    xrange = 2;
end

D=32;
N=D^2;

k=-N/2:N/2-1;
x = (D/N)*k;
dx = x(2)-x(1);

f = func(x);

idx=find(abs(x)<xrange);

subplot(2,1,1);
plot(x(idx),f(idx),'k','LineWidth',1.5);
grid;
%axis([-xrange xrange 0 1.1]);
xlabel('x');
ylabel('f(x)');

ft = fftshift(fft(fftshift(f)))*dx;
fx = (1/D)*k;
fr = real(ft);
fi = imag(ft);
fprintf('maximum real value %g\n',max(abs(fr)));
fprintf('maximum imag value %g\n',max(abs(fi)));
if (max(abs(fr))<1e-10)
    fr = fi;
    str = 'imag part';
else
    str = 'real part';
end

idx = find(abs(fx)<frange);
subplot(2,1,2);
plot(fx(idx),fr(idx),'k','LineWidth',1.5);
grid;
%axis([-frange frange 0 1.5]);
xlabel('\xi');
ylabel(['F(\xi) ' str]);