% Mandelbrot plotter % A Matlab script which plots the Mandelbrot set. % Written by Toby Newman for the sheer love of it. % http://www.asktoby.com % ====================== % Clear the workspace clear; clc; % Create a menu allowing the user to select a quality setting. quality = menu('select quality', 'coarse and fast', 'medium', 'detailed and slow'); % The menu returns 1, 2 or 3. Translate these values into useful detail % quality values: quality = 0.05/(quality*2); % Turn on 'Hold' to allow the Mandelbrot set to be drawn onto the complex % plane, pixel by pixel, as the program iterates. hold on; % Echo progress to console disp('Working...') % Work through every value in the complex plane. The accuracy is defined by % the 'quality' variable which was chosen using a menu above. This defines % the skipped space between worked-out values. % First, work through all real values in increments of the value 'quality' % It is known that real values which are part of Mandelbrot's set go % from -2.1 to 1 so this sets the start/end points. for m = -2.1:quality:1 % Next, work through all imaginary values in increments of the value 'quality' % It is known that imaginary values which are part of Mandelbrot's % set go from -1.2 to 1.2 so this sets the start/end points. for n = -1.2:quality:1.2 % create a complex value on the complex plane. Z0 = complex(m,n); % Run the first step of the iterative formula required to decide % if this value will tend to infinity or not Zn = Z0^2 + Z0; % Repeat the above, iterating from 1 to 50 to give the complex % number a chance to go to infinity, or to settle. for iterations = 1:1:50 % Run the remaining steps of the iterative formula required to decide % if this value will tend to infinity or not Zn = Zn^2 + Z0; end % Check to see if the result is part of the set or if it has gone to % infinity % If the modulus of the result exceeds 2, the calculation will always, % if iterated more, continue on to infinity. Therefore, all the program needs to do is % determine that the modulus of the iteration calculation result has % exceeded 2 to declare that it’s not part of the set. % Check to see if the modulus (abx(Zn)) is less than 2 if (abs(Zn)<2) % The modulus is less than 2. The value IS part of the % Mandelbrot set. Plot it as a pixel on the complex plane. plot (Z0); end end end % Echo progress to console disp('Done!')