This preview shows page 1. Sign up to view the full content.
Unformatted text preview: Engineering 101 Quote of the Day
Education is what survives when what has been learned has been forgotten.
- B. F. Skinner program! MATLAB Applications: Mandelbrot Set MATLAB Programming Example: The Mandelbrot Set Programming Example: The Mandelbrot Set
Fractals are of interest because, in addition to being mathematically beautiful objects, they have the property of self-similarity. selfIn this respects they are like a number of natural and man-made systems like coastlines and rough mansurfaces. The Mandelbrot set
Generated from the equation: The Mandelbrot set
Generated from the equation: 2 zm +1 = zm + c
c=1 2 zm +1 = zm + c z1=0 z2=1 z3=2 z4=5 z5=26 z6=677 z7=458330 c=0.1 z1=0 z2=0.1 z3=0.11 z4=0.1121 z5=0.11256... 1 The Mandelbrot set
We determine the value of a point by determining how many iterations it takes to grow greater than 2 and dividing by the total number of iterations. For example, consider 10 total iterations
M(1) = 0.4 M(0.1) = 1 (it never becomes greater than 2) The Mandelbrot set
The trick is we do this with complex numbers. So every point in the plane has a real value given by the x axis and an imaginary value given by the y axis. Squares of imaginary numbers are taken in the standard way (1+2i)2 = (1+2i)(1+2i) = 1+2i+2i+4i2 = 1+4i -4 = -3+4i The condition to stop the iteration will be that the norm, absolute value, of the number (the square root of the number times its complex conjugate) is greater than 2. c=1 z1=0 z2=1 z3=2 z4=5 z5=26 z6=677 z7=458330 c=0.1 z1=0 z2=0.1 z3=0.11 z4=0.1121 z5=0.11256... The Mandelbrot set
So to make the set we must first write a function that will take as input:
a matrix c where each element of the matrix is a complex number a number of iterations, niters The Mandelbrot set
function res = mandelbrotIterate (c, niters) z = zeros(size(c)); for i = 1:niters z = z.^2 + c; end It will have to set the initial values of z for each c to 0. Then we must make a loop that will repeatedly apply the equation to each value of z 2 zm +1 = zm + c The Mandelbrot set
Since we only want to continue to iterate the z's that are less than 2 we will use a logical array called active The value of active will be 1 if abs(z) is still less than or equal to 2 The Mandelbrot set
function res = mandelbrotIterate (c, niters) z = zeros(size(c)); active = ones(size(c)); for i = 1:niters z(active) = z(active).^2 + c(active); active = abs(z) <= 2; end 2 The Mandelbrot set
As a final step, we need to make sure than when a site first becomes inactive, the program determines the iteration in which it exceeded 2 and calculates the value of iteration/total iterations for the result, res. res. When a site first becomes inactive, the program must determine the iteration in which it exceeded 2 and calculate the value of iteration/total iterations for the result, res. Which function does this? res. 1 2 The Mandelbrot Set
Now we have a function mandelbrotIterate(c, niters) that mandelbrotIterate(c, will calculate the result for a matrix of complex values c over a number of iterations niter Next we must design a function that will create the matrix c, call mandelbrotIterate, mandelbrotIterate, and plot the result in a pseudocolor plot. We will call this function drawMandelbrot and pass it the range [xmin xmax ymin ymax], the resolution (number of boxes in each direction) and the number of iterations (niter).
xmin=6, xmax=12, resolution=2 xmin=6, xmax=12, resolution=3 xmin=6, xmax=12, resolution=5 xvals = [6, 12] xvals = [6, 9, 12] xvals = [6, 7.5, 9, 10.5, 12] The Mandelbrot Set
function drawMandelbrot(range,resolution,niter) drawMandelbrot(range,resolution,niter) % we will have to create c here res = mandelbrotIterate(c,niter); mandelbrotIterate(c,niter); pcolor(res); shading flat; colormap jet; Which function fragment creates c properly? Recall:
range is a vector that holds [xmin xmax ymin ymax] resolution is the number of boxes in each direction Each box in c holds the complex number x+iy
xmin=6, xmax=12, resolution=2 xmin=6, xmax=12, resolution=3 xmin=6, xmax=12, resolution=5 xvals = [6, 12] xvals = [6, 9, 12] xvals = [6, 7.5, 9, 10.5, 12] Mandelbrot set
Now if we execute the command drawMandelbrot([drawMandelbrot([-2.5 2.5 -2 2],400,40) we obtain the image: 1 2 3 3 Graphical User Interfaces
MATLAB also contains a variety of built in functions to help build graphical user interfaces (GUI). We will use a handful of these to make a GUI front end to our Mandelbrot set program. GUI Methods
The function menu( titlestring, choices ) creates a titlestring, menu with a title given by the titlestring and buttons containing the list of strings given by choices and returns the number of the one chosen. mandelbrotgui
function mandelbrotgui stack = [-1.8 1.8 -1.3 1.3]; [f = figure; res = 400; niter = 30; while 1 coords = stack(end,:); drawMandelbrot(coords, res, niter); choice = menu('Which one?', 'Zoom', 'Pan Out', 'Quit'); switch choice case 1 % Zoom case 2 % Pan Out case 3 % Quit break; end end GUI Methods
The function waitforbuttonpress pauses and waits for the user to press the button. The function get(h, propertyname) returns the property propertyname) named associated with the handle h. The handle gca refers to the currently active figure. The propertyname `CurrentPoint' refers to the location CurrentPoint' in the figure. The function rbbox tracks a rubberband box. Case1: Zoom
case 1 waitforbuttonpress; waitforbuttonpress; point1 = get(gca,'CurrentPoint'); get(gca,'CurrentPoint'); % button down detected rbbox; rbbox; point2 = get(gca,'CurrentPoint'); get(gca,'CurrentPoint'); % button up detected stack(end+1,:)= [point1(1,1) point2(1,1) point1(1,2) point2(1,2)]; case 2 Case2: Pan Out
if size(stack,1) > 1 stack = stack(1:(end-1),:); stack(1:(endelse midx = mean(stack(1,1:2)); midy = mean(stack(1,3:4)); lenx = abs(diff(stack(1,1:2))); leny = abs(diff(stack(1,3:4))); stack = [midx+lenx*[-1,1], midy+leny*[-1,1]]; [midx+lenx*[midy+leny*[end 4 mandelbrotgui.m Code Available on CTools
Code for mandelbrotIterate, drawMandelbrot mandelbrotIterate, and mandelbrotgui are available on the course website resources in the MATLAB folder. Next Lecture
Introduction to Parallel Programming 5 ...
View Full Document
This note was uploaded on 05/04/2010 for the course ENGIN 101 taught by Professor Jeffringenberg during the Spring '07 term at University of Michigan.
- Spring '07