function fourier(func,xrange,frange)
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;
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;
xlabel('\xi');
ylabel(['F(\xi) ' str]);