I wonder what the Fourier transform of the Mandelbrot set looks like? More specifically, the 2D Fourier transform of the function f(x,y) = {0 if x+iy is in M, 1 otherwise}. This has infinitely fine features, so the Fourier transform will extend out infinitely far from the origin. It's aperiodic, so the Fourier transform will be non-discrete.
The result will be a complex-valued function of complex numbers (since each point in the frequency domain has a phase and amplitude). That raises the question of its analytical properties - is it analytic everywhere, in some places or nowhere? (Probably nowhere).
Other interesting Mandelbrot-set related functions that could also be Fourier transformed:
= the nth iterate of the Mandelbrot equation ().
= distance between x+iy and the closest point in the Mandelbrot set. Phase could also encode direction.
= the potential field around an electrically charged Mandelbrot set.
I, too, have wondered what happens when a Fourier transform is taken of the Mandelbrot set. Rather than 2-dimensional image I have used a 1-dimensional line and generated audio. You can find the result at http://soundcloud.com/anythingkeyboard/inverse-fourier-transform-of
Hopefully you get this
Interesting! How did you generate this? The part of the Mandelbrot set that intersects the real axis is just the interval [-2,0.25] i.e. just a rectangle function so it's Fourier transform is just a sinc function. So you must be doing something more complicated than that...
This is in the region [-1.5:0.5]. X axis resolution is 1/1000 and Y axis resolution is 1/100000. The number of iterations performed was 500.
I generated a line that meets the boundary between infinity and not-infinity. this line gave me the upper half of the Mandelbrot. Using the Inverse Fast Fourier Transform, ifft(), Hanning window, resulted in what you can hear. It is interesting to note the almost voice like quality coming through, although I am sure this is more from artefacts in aliasing.
This was generated using MATLAB code attached below. The only step missing from this is the ifft().
clear
res = 100000; %Smallest time resolution Larger = greater resolution
startt = -1.5; %Time start
endt = 0.5; %Time end
quant = 0.001;% Smallest y axis quantisation smaller = greater resolution
xindex = 1;% Index for x array
z = 0; % Make sure z is defined before loop
xsize = round((endt-startt)*res); %preset the size of x for speed
x = zeros(xsize,1)'; %Fill with zero
pl = 1; %Variable used for plotting graph at defined times
for t = res*startt:res*endt %for every "sample"
m = 0; %imaginary coefficient= 0
z = 0; %Reset complex number z
while isfinite(z) %Loop until z is infinite
z = 0; %Make sure complex number z is 0+0i
c = t/res + m*1i; %Co-ordinates. Real are x axis imag are y axis
n = 1; %This will be counter
while n < 500 %Loop n times
z = z^2+c; %New complex number based on co-ordinates and old number
n = n+1; %Increment counter
if isinf(z) %Break this loop if it reaches infinity
break
end
end
m = m+quant; %Increase the imaginary co-efficient by quant
end
x(xindex) = m; %Preparing location to store
xindex = xindex+1; %Store value of m, the complex part
pl = pl+1; %Counter for plotting graph
if pl == 100 %Every 20 cycles
plot(x(1:xindex-1))
pause(0.01) %Let graph plot before moving on
pl = 1; %Reset the variable
end
end %Lather, rinse, repeat
My bad, the range is actually [-1.5 0.248] when I had cropped it